logo资料库

数据结构课程设计城市链表.docx

第1页 / 共16页
第2页 / 共16页
第3页 / 共16页
第4页 / 共16页
第5页 / 共16页
第6页 / 共16页
第7页 / 共16页
第8页 / 共16页
资料共16页,剩余部分请下载后查看
城市链表 1.问题描述:城市链表 将若干城市的信息,存入一个带头结点的单链表。结点中的城市信息 包括城市名和城市的位置坐标。 2. 基本要求:能够通过利用城市名和位置坐标进行有关查找、插入、 删除、更新等操作。 3. 算法思想 (1)创建一个城市链表,能够输入若干城市的信息,结点中城市信 息包括城市名和城市的位置坐标。 (2)创建一个查询函数,能够通过利用城市名查询位置坐标 (3)创建一个查询函数,能够通过位置坐标距离中心坐标的距离查 询城市名 (4)创建一个选择函数,来选择查询方式 (5)创建一个插入函数,能够插入新的城市信息 (6)创建一个删除函数,能够删除城市信息 (7)创建一个更新函数,能够更新城市信息 (8)在主函数中调用这些函数,通过 switch 来选择不同的函数满足 不同的要求 (9)执行完毕,退出程序 4. 模块划分 (1)void init(Citynode *Lhead)//初始化链表 (2)void creatlist(Citynode *Lhead)//创建城市链表
(3)void search1(Citynode *Lhead)//通过城市名查找城市坐标 (4)void search2(Citynode *Lhead)//通过与中心坐标的距离查询 城市信息 (5)void choose(Citynode *Lhead)//选择查询方式 (6)void insert(Citynode *Lhead)//插入新的城市 (7)void delet(Citynode *Lhead)//删除城市信息 (8)void update(Citynode *Lhead)//更新城市信息 (9)void print(Citynode *Lhead)//输出城市列表 (10)int main()//设置选择页面,调用不同的函数 5. 数据结构 所定义具体问题的基本类型:typedef int datatype; typedef struct data{ char csname[30]; float a; float b; }data; 基本抽象数据类型:typedef struct Citynode{ data xx; struct Citynode* next; }Citynode,City; 6. 源程序 #include
#include #include #include typedef int datatype; typedef struct data{ char csname[30]; float a; float b; }data; typedef struct Citynode{ data xx; struct Citynode* next; }Citynode,City; void init(Citynode *Lhead) { } Lhead->next=NULL; void creatlist(Citynode *Lhead)//创建城市链表 { int n; printf("请输入要创建的链表的城市个数:"); scanf("%d",&n);
int i; for(i=0;inext) { printf("请输入您要搜索的城市名称\n"); scanf("%s",sname); while(p->next!=NULL&&strcmp(p->next->xx.csname,sname)) { } p=p->next; if(p->next==NULL) { } printf("您要查找的城市不存在"); return ; printf("城市坐标为:(%f,%f)\n",p->next->xx.a,p->next->xx.b);
} else { } } printf("链表未建立,请先建立链表"); void search2(Citynode *Lhead)//按坐标查询 { char m; float a1,b1; Citynode *p=Lhead; float distance; if(p->next) { printf("请输入中心坐标 a,b\n"); scanf("%f%c%f",&a1,&m,&b1); printf("请输入距离:"); scanf("%f",&distance); printf("距中心坐标(%f,%f)的城市距离为",a1,b1); printf("%f 的城市有:\n",distance); p=p->next; while(p!=NULL)
{ float t=(a1-p->xx.a)*(a1-p->xx.a)+(b1-p->xx.b)*(b1-p->xx.b); while(t<=distance*distance) {printf("%s\t",p->xx.csname); printf("(%.f,%.f)\n",p->xx.a,p->xx.b);break;} p=p->next;} } else { } } printf("链表未建立,请先建立链表\n"); void choose(Citynode *Lhead)//选择查询方式进行查询,返回的是所要 查询的信息 { Citynode *p=Lhead; int s; printf("___________________________\n"); printf("查询菜单\n"); printf("________________________\n");
printf("1.按名称查询\n"); printf("2.按坐标查询\n"); printf("3.返回上级菜单"); printf("___________________________\n"); scanf("%d",&s); switch(s) case 1:search1(p);break; case 2:search2(p);break; case 3:break; default:printf("输入错误,请重新输入\n");break; { } } void insert(Citynode *Lhead)//插入新的城市,返回的是插入后的新链 表 { Citynode * newnode; char m; newnode=(Citynode*)malloc(sizeof(Citynode)); if(newnode==NULL) { printf("内存分配失败\n");
return ; } printf("请输入城市名:\t"); scanf("%s",newnode->xx.csname); printf("请输入城市坐标 a,b:\t"); scanf("%f%c%f",&newnode->xx.a,&m,&newnode->xx.b); while(Lhead->next!=NULL) Lhead=Lhead->next; newnode->next=Lhead->next; Lhead->next=newnode; } void delet(Citynode *Lhead)//删除城市信息,返回的是删除后的新链 表 { } char delname[30]; printf("请输入要删除的城市名称:\n"); scanf("%s",delname); while(strcmp(Lhead->next->xx.csname,delname)) Lhead=Lhead->next; Lhead->next=Lhead->next->next;
分享到:
收藏