| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2109 人关注过本帖
标题:求大神帮忙把这个程序改成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. 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. 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. 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. 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. 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. 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. 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. 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. 18  }break; 
case 6: 

 { 
  cout<<"-----------------------------感谢使用---------------------------"<<endl; 
  cout<<"=============================真诚设计
==========================="<<endl; 
  exit(0); 

 }break; 
  } 

 } 
} 
  

 

 

 

 

 

 

 

 

 

 

 
  
搜索更多相关主题的帖子: 城市 坐标 结点 data cout 
2018-07-06 16:52
偏飞
Rank: 2
等 级:论坛游民
威 望:1
帖 子: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: 9Rank: 9Rank: 9
来 自:mcu
等 级:贵宾
威 望:14
帖 子:541
专家分:1178
注 册:2016-9-17
收藏
得分:0 
你可知道翻译是需要钱的 ,要是一句两句倒是可以免单

穷举是最暴力的美学
2018-07-06 22:01
八画小子
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:37
帖 子:709
专家分:2063
注 册: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
快速回复:求大神帮忙把这个程序改成c的,蟹蟹
数据加载中...
 
   



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

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