1、3概要设计1)为了实现上述程序功能,需要定义单链表的抽象数据类型:ADT LinkList 数据对象:D=ai|aiIntegerSet,i=0,1,2,n,n0 数据关系:R=|ai,ai+1 D基本操作:City CreateList()操作结果:构造一个城市链表L,录入五个城市信息.search()初始条件:城市链表已存在操作结果:查找是否有与输入值一致的城市名,若存在,返回城市的位置坐标;Insert()将新的城市信息插入到链表中 Delete()初始条件:删除链表需要删除的城市信息distance()输出给定的一个距离范围内的所有城市信息alter()修改链表中的城市信息print(
2、)打印出城市链表中的所有城市信息begin() 在屏幕上显示操作功能号2)本程序包含8个函数: 主函数main() 创建城市链表函数City CreateList() 显示操作功能函数void begin() 显示单链表城市信息函数void print() 插入一个城市函数void Insert() 删除一个城市信息函数void Delete() 查找城市坐标函数void search() 修改城市链表函数void alter() 查找一个固定距离范围内的城市void distance()各函数间关系如下: 4详细设计#includemalloc.hmath.h#include string.
3、htypedef int status;typedef struct datachar Cname;float x;float y;data;typedef struct CityNode data data; struct CityNode *next;CityNode,*City;City L;City CreateList() /创建城市链表 int i; City p; L=(City )malloc(sizeof(CityNode); L-next=NULL; printf(请输入5个城市的数据域:n); for(i=0;idata.Cname,&data.x,&data.y); g
4、etchar(); p-next=L-next; L-next=p; return L;void search() /查找城市坐标 char name; p=L;请输入需要查找的城市名: scanf(%cname);该城市的坐标为: while(p) if(p-data.Cname=name)%f,%f,p-data.x,p- p=p-void Insert() /插入新的城市 City p=L- City s=(City)malloc(sizeof(CityNode);请输入要插入的城市名及它的坐标%c,%f,%fs- s-next=p- p-next=s;新城市%c插入成功n,s-data
5、.Cname);void Delete() /删除城市City q,p=L-int j=0;char z;printf(请输入要删除的城市名:scanf(z);while(p-data.Cname!=z) q=p;q-free(p);删除成功!void distance() /距离范围内的城市float s,d;float x1,y1,x2,y2;City p;p=L-请输入中心坐标x1,y1:x1,&y1);请输入与中心城市的距离范围d:%fd);while(p)x2=p-data.x; y2=p-data.y; s=sqrt(x1-x2)*(x1-x2)+(y1-y2)*(y1-y2);
6、if(svoid alter() /修改城市节点 char a,b; float m,n; int k=0; City p=L;请输入旧的城市名:a); while(p-=a) 请输入新的城市名: %cb);请输入新的城市坐标:m,&n);data.Cname=b;data.x=m;data.y=n;void print() /输出城市链表 City a; char name10; float x10; float y10; a=L- i=0; while(a) namei=a-data.Cname; xi=a- yi=a- a=a- printf(%c (%f,%f)n,namei,xi,y
7、i); i+;void begin() do-n 请选择需要操作的功能: n 1-输出城市链表信息n 2-查找n 3-插入n 4-删除n 5-修改n 6-与坐标P距离小于D的城市n 0-退出程序n请输入您选择的功能号:%di); getchar(); if(i0) switch(i) case 1:print();break; case 2:search(); case 3:Insert(); case 4:Delete(); case 5:alter(); case 6:distance(); case 0: if(i printf(您输入的数值不正确,请重新输入! while(i!=0);
8、void main() CreateList(); begin();5调试分析 a是如何解决的以及对设计与实现的回顾讨论和分析;调试过程中遇到的问题有在写调用函数是函数的形参的类型与实参的类型不一致我经常在很多地方符号丢失 改进设想;直接将数值在调用的函数里定义、输入及输出避免在主函数里传实参值,这样就不易出错。 b经验和体会 写函数时对指针的应用有些混乱 总的来说还是对以前的C语言知识有些遗忘,基础不够扎实导致所发的时间太多了。6使用说明程序名为Globals,运行环境为VC,每一步都有提示信息提示下一步的实现功能及它的操作输入,当输入错误时有错误提示信息。7测试结果1)输入数据打印出所有的城市信息2)输入城市名查找出相应的位置坐标3)将一个新的城市信息插入到链表中并打印出改动后的链表中的所有城市信息4)删除一个城市信息并打印出改动后的链表中的所有城市信息5)修改一个旧的城市信息输入新的城市名及坐标,改动后的链表中的所有城市信息6)查找距离城市
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1