| 网站首页 | 业界新闻 | 群组 | 人才 | 下载频道 | 博客 | 代码贴 | 编程论坛
雷速体育发帖软件开发QQ118000023C语言培训|一对一辅导|零基础学编程LightningChart 快速先进的.Net图表控件
共有 249 人关注过本帖
标题:求大神帮忙把这个程序改成c的,蟹蟹
只看楼主 收藏
遇星尘
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2018-7-6
结帖率:0
  问题点数:0  回复次数:5   
求大神帮忙把这个程序改成c的,蟹蟹
程序代码:

#include<iostream>
using namespace std;
template<class T>
classBinNode;
template<class T>
classBiTree;
template<class T>
class information  //此类包含城市的所有信息包含城市名两个坐标
{
 public:
  T city; //城市名
  struct location//定义一个结构体用来放城市的坐标
  {
   intx,y;//城市坐标
  }city_cityname;//结构体 location的对象
};
template<class T>
class BiNode// 二叉排序树的结点结构
{
 public:
  friend class BiTree<T>;//将BiTree这个类声明为其友元类使其可以调
用这个类中的一切 www.docin.com 10   information<T>data;
  BiNode<T>*lchild,*rchild;
};
template<class T>
classBiTree
{
 public:
  BiTree(T a[],int n);//带参构造函数  
  BiNode<T>*Getroot(){return root;}//获取指向根结点的指针
  BiNode<T>*InsertBST(BiNode<T>*root,BiNode<T>*s); //在二叉排序树
中插入一个结点s此处用于起始值插入
  BiNode<T>*InsertBST1(BiNode<T>*root,BiNode<T>*s);
  //2在二叉排序树中插入一个结点s用于后期功能的多个或一个插入
  
//
值会显示插入成功
  BiNode<T>*SearchBST(BiNode<T>*root,T k);//查找值为k的结点
  void Preorder(BiNode<T>*rt);//前序遍历二叉树
  void Inorder(BiNode<T>*rt); //中序遍历二叉树
  void Choose();//选择界面
  BiNode<T>*Begain(BiNode<T>*root,BiNode<T>*s);//对城市X,Y坐标
进行初始化
  BiNode<T>*Find(BiNode<T>*root,T k);//用于查找需要被比较的城市的
坐标
  BiNode<T>*Find1(BiNode<T>*root,T k);//查找作为参照的城市坐标
private:
  BiNode<T>*root;//二叉排序树的根指针
};
#include"1.h"
#include<iostream>
#include<stdlib.h>
#include<math.h>
#include<string>
template<class T>
classBiTree;
 static intx,y,z,w;//后面需要用到的算距离范围
template<class T>
BiTree<T>::BiTree(T a[],int n)//构造函数初始化所有内容
{
 root=NULL;
 for(inti=0;i<n;i++)
 {
  BiNode<T>*s=new BiNode<T>;
  s->data.city=a[i];
  s
->lchild=NULL;
  s->rchild=NULL; www.docin.com 11   root=InsertBST(root,s);//结点依次插入
  Begain(root,s);//输入起始数据的各个坐标

 }
}
template<class T>
BiNode<T>*BiTree<T>::InsertBST(BiNode<T>*root,BiNode<T>*s)
{//在二叉排序树中插入一个结点s此处用于起始插入值
if(root==NULL) //如果原结点不存在则插入结点变成根结点
  return s;
 else//如果有结点存在则进行判断二叉排序树特点根结点大于其左子树
小于其右子树
 {
  if(s->data.city<root->data.city)//插入结点小于根结点按关键字城市名
进行判断
   root->lchild=InsertBST(root->lchild,s);//插入到左子树中
  else //插入结点大于根结点按关键字城市名进行判断
   root->rchild=InsertBST(root->rchild,s); //插入到右子树中
  return root;
 }
}
template<class T>
BiNode<T>*BiTree<T>::InsertBST1(BiNode<T>*root,BiNode<T>*s)
{//1在二叉排序树中插入一个结点s用于后期功能的多个或一个插入值会显
示插入成功
 if(root==NULL) //如果原结点不存在则插入结点变成根结点
  return s;
 else
 {
  if(s->data.city<root->data.city)
  {
   root->lchild=InsertBST(root->lchild,s);
   
  }
  else
  {
   root->rchild=InsertBST(root->rchild,s);
   cout<<" "<<endl;
   Begain(root,s);
  }
 }
 return root;
}
template<class T>
BiNode<T>*BiTree<T>::Begain(BiNode<T>*root,BiNode<T>*s) www.docin.com 12 {//输入起始数据的各个坐标
cout<<"下面进行城市坐标的初始化请输入城市:"<<s->data.city<<"的X,Y
坐标"<<endl;
cout<<"请输入x坐标:";
 cin>>s->data.cityname.x;
 cout<<"请输入y坐标:";
 cin>>s->data.cityname.y;
 return root;
}
template<class T>
void BiTree<T>::Choose()//显示的总界面
{
 cout<<endl<<endl<<endl;
 cout<<"**********************************************************
********"<<endl;
cout<<"===================================================
==============="<<endl;
cout<<"*                   $欢迎使用城市信息管理系统
$                   *"<<endl;
cout<<"===================================================
==============="<<endl;
cout<<endl;
 cout<<"*------------请根据如下城市代码了解数字代表的城市信息
------------*"<<endl;
cout<<"##########################################################
#########"<<endl;
cout<<"*------------------------------功能列表--------------------------*"<<endl<<endl;
 cout<<"(1)***********************前序遍历城市信息表
**********************"<<endl;
cout<<"(2)***********************中序遍历城市信息表
**********************"<<endl;
cout<<"(3)**************************查询城市信息
*************************"<<endl;
cout<<"(4))************************查找指定范围内的城市
*******************"<<endl;
cout<<"(5))***************************插入一个城市
************************"<<endl;
cout<<"(6)******************************退出
******************************"<<endl;
cout<<endl;
}
template<class T>
void BiTree<T>::Preorder(BiNode<T> *rt) //前序

{ www.docin.com 13  if(rt)
 {
 
 cout<<rt->data.city<<"("<<rt->data.cityname.x<<","<<rt->data.cityname.y
<<")"<<ends;
  Preorder(rt->lchild);
  Preorder(rt->rchild);
 }
}
template<class T>
void BiTree<T>::Inorder(BiNode<T>*rt) //中序
{
 if(rt)
 {
  Inorder(rt->lchild);
 
 cout<<rt->data.city<<"("<<rt->data.cityname.x<<","<<rt->data.cityname.y
<<")"<<ends;
  Inorder(rt->rchild);
 }
}
template<class T>
BiNode<T>*BiTree<T>::Find(BiNode<T>*root,T k)
{ //得到被比较结点的x,y坐标根据关键字查找
if(root==NULL)
  return root;
 else
 {
  if(root->data.city==k)
  {  //查找成功返回
   x=root->data.city_cityname.x;//将找到的结点的坐标分别赋值给两
个变量xy
   y=root->data.city_cityname.y;
   return root;
  }
  else//如果之前没找到则按二叉排序树左小右大的规律继续查找
  {
   if(k<root->data.city)
   {
    return Find(root->lchild,k);
   }
   else
   {
    return Find(root->rchild,k); www.docin.com 14    }
  }
 }
}
template<class T>
BiNode<T>*BiTree<T>::Find1(BiNode<T>*root,T k)
{//得到结点的x,y坐标作为参照的结点的坐标值
if(root==NULL)
  return root;//同上解释
else
 {
  if(root->data.city==k)
  {//查找成功返回
   z=root->data.city_cityname.x;
   w=root->data.city_cityname.y;
   return root;
  }
  else
  {
   if(k<root->data.city)
   {
    return Find(root->lchild,k);
   }
   else
   {
    return Find(root->rchild,k);
   }
  }
 }
}
template<class T>
BiNode<T>*BiTree<T>::SearchBST(BiNode<T>*ROOT,T k)
{//查找某个城市的所有信息
if(root==NULL)
 {//没有找到时的显示
  cout<<"此城市不存在!"<<endl;
  return NULL;
 }
 else
 {
  if(root->data.city==k)
  {//查找成功返回
   cout<<"查找"<<root->data.city<<"成功!"<<endl;
   cout<<"城市为"<<root->data.city<<"的坐标为www.docin.com 15 "<<"("<<root->data.cityname.x<<"<"<<root->data.cityname.y<<")"<<endl;
   return root;
  }
  else
  {
   if(k<root->data.city)
   {
    returnSearchBST(root->lchild,k);
   }//如果之前没找到则按二叉排序树左小右大的规律继续查找
           
//
查找左子树
   else
   {
   returnSearchBST(root->rchild,k);
   }//查找右子树
  }
 }
}
#include"1.cpp"
void main()
{
 int n;
 cout<<"您想输入起始数据的次数:";
 cin>>n;
 string a[100];
 for(inti=0;i<n;i++)
 {
  cout<<""<<i+1<<"个城市 :";
  cin>>a[i];
 }
 BiTree<string>citylist(a,n);
 for(int d=0;d<d+1;d++)
 {
  citylist.Choose();
  cout<<endl;
  int k;
  cout<<"请输入功能序号:";
  cin>>k;
  switch(k)
  {
case 1:
 {
  for(inti=0;i<n;i++)
   cout<<"
"
<<i+1<<"个城市:"<<a[i]<<endl;
  cout<<endl; www.docin.com 16   cout<<"前序遍历为【城市坐标1坐标2】:"<<endl;
  citylist.Preorder(citylist.Getroot());
  cout<<endl;
 }break;
case 2:
 {
  for(inti=0;i<n;i++)
   cout<<""<<i+1<<"个城市:"<<a[i]<<endl;
  cout<<endl;
  cout<<"中序遍历为【城市坐标1坐标2
】:"<<endl;
  citylist.Inorder(citylist.Getroot());
  cout<<endl;
 }break;
case 3:
 {
  for(inti=0;i<n;i++)
   cout<<""<<i+1<<"个城市:"<<a[i]<<endl;
  cout<<endl;
  string j;
  int b;
  cout<<"你想查询的次数:";
  cin>>b;
  for(int e=0;e<b;e++)
  {
   cout<<"请输入要查询的城市:";
   cin>>j;
   citylist.SearchBST(citylist.Getroot(),j);
  }
 }break;
case 4:
 {
  for(int j=0;j<n;j++)
   cout<<""<<j+1<<"个城市:"<<a[j]<<endl;
  cout<<endl;
  BiNode<string>*fcity=new BiNode<string>;
  int dis;
  cout<<"请输入指定的城市:";
  cin>>fcity->data.city;
  cout<<endl<<"请指定距离:";
  cin>>dis;
  cout<<endl;
  int v;
  for(inti=0;i<n;i++)
  { www.docin.com 17    if(a[i]==fcity->data.city)
    continue;
   else
   {
    citylist.Find(citylist.Getroot(),a[i]);
    citylist.Find1(citylist.Getroot(),fcity->data.city);
    v=sqrt((x-z)*(x-z)+(y-w)*(y-w));
    cout<<"城市为"<<a[i]<<"的城市与选定城市范围的距离
为:"<<v<<endl;
    if(v<dis)
    {
     cout<<"城市为"<<a[i]<<"的城市在指定的范围
内!"<<endl;
     cout<<endl;
    }
    else
    {
     cout<<"不在指定范围内."<<endl;
     cout<<endl;
    }
   }
  }
 }break;
case 5:
 {
  for(inti=0;i<n;i++)
  {
   cout<<""<<i+1<<"个城市:"<<a[i]<<endl;
  }
cout<<endl;
  int c;
  cout<<"你想插入的次数";
  cin>>c;
  for(int j=0;j<w;j++)
  {
   cout<<"请输入要插入的城市:";
   BiNode<string>* ecity = new BiNode<string>;
   cin>>ecity->data.city;
   n++;
   a[n-1]=ecity->data.city;
   ecity->lchild=NULL;
   ecity->rchild=NULL;
   citylist.InsertBST1(citylist.Getroot(),ecity);
  } www.docin.com 18  }break;
case 6:
 {
  cout<<"-----------------------------感谢使用---------------------------"<<endl;
  cout<<"=============================真诚设计
==========================="<<endl;
  exit(0);
 }break;
  }
 }
}
  
 
 
 
 
 
 
 
 
 
 
 
  
2018-07-06 16:52
偏飞
Rank: 2
等 级:论坛游民
帖 子:10
专家分:49
注 册:2018-7-6
  得分:0 
你这个工作量有点大。。。
你可以尝试按以下要点慢慢去改
1.把模板去掉,参数类型换成char *
2.字符串的比较用strcmp,字符串的赋值用strcpy
3.string类型都改成char*
4.类函数用函数指针替换掉,初始化实把实际的函数赋值给函数指针
5.cout和cin改为相应的printf和scanf

[此贴子已经被作者于2018-7-6 18:57编辑过]

2018-07-06 18:56
nosnoy
Rank: 8Rank: 8
来 自:mcu
等 级:蝙蝠侠
威 望:6
帖 子:435
专家分:812
注 册:2016-9-17
  得分:0 
你可知道翻译是需要钱的 ,要是一句两句倒是可以免单

电闪雷鸣之际 ,当心无杂念,安心渡劫
                                         -18.06.21
2018-07-06 22:01
八画小子
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:15
帖 子:508
专家分:1228
注 册:2010-11-11
  得分:0 
中间用到了泛性编程,困难很大啊。
2018-07-07 10:14
遇星尘
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2018-7-6
  得分:0 
回复 2楼 偏飞
三克油,我试试
2018-07-07 21:43
遇星尘
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2018-7-6
  得分:0 
回复 3楼 nosnoy
现在知道了
2018-07-07 21:43







关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.042416 second(s), 8 queries.
Copyright©2004-2018, BCCN.NET, All Rights Reserved