您好,欢迎访问三七文档
数据结构实验报告___09___级__x____班_xxxxx___年___xx___月__xx___日姓名__xxxxx___学号_xxxxxxx___得分_____________1.实验题目将若干城市的信息,存入一个带头结点的单链表。结点中的城市信息包括:城市名,城市的位置坐标。要求能够利用城市名和位置坐标进行有关查找、插入、删除、更新等操作。2.需求分析本演示程序用VC编写,完成城市链表的生成,插入、删除,更新等操作。①输入的形式和输入值的范围:先创建一个城市链表需要输入五个城市的名称及城市的位置坐标;再输入你需要对链表的操作功能号1输出城市链表信息、2查找、3插入、4删除、5修改、6输出与坐标P距离小于D的城市、0退出程序.查找城市时输入城市的名称;插入城市信息时输入城西的名称及它的位置坐标;删除链表中的城市需输入城市的名称;修改城市链表是需输入旧的城市名和新的城市名及新的位置坐标;操作6应输入中心城市的坐标及一个距离范围。在所有输入中,操作功能号是整数,城市名是单个的字母,位置坐标及距离是浮点型的数字。②输出的形式:黑框界面出现时就提示出入5个城市的数据域,之后每次操作都会输出包含各个操作的功能表以供选择,输出城市链表是会输出城市名及位置坐标,其它的操作每一步都会输出相应的提示信息。③程序所能达到的功能:完成城市链表的生成、插入、删除、查找及更新操作④测试数据:A.创建城市链表操作中依次输入e1.02.0←d2.02.5←c4.53.2←b5.42.6←a7.45.2生成一个城市链表B.查找操作中输入城市名c返回这个城市的位置坐标4.53.2C.插入操作中依次输入新的城市名及位置坐标f,7.4,3.5,返回插入成功提示D.删除操作中输入需删除的城市名f,返回删除成功提示E.更新操作依次输入e,g,2.8,5.7返回更新成功提示F.查找距离操作中依次输入中心坐标及距离3.8,6.4,2.66返回链表中符合要求的城市信息g,2.8,5.73.概要设计1)为了实现上述程序功能,需要定义单链表的抽象数据类型:ADTLinkList{数据对象:D={ai|ai∈IntegerSet,i=0,1,2,…,n,n≥0}数据关系:R={ai,ai+1|ai,ai+1∈D}基本操作:CityCreateList()操作结果:构造一个城市链表L,录入五个城市信息.search()初始条件:城市链表已存在操作结果:查找是否有与输入值一致的城市名,若存在,返回城市的位置坐标;Insert()初始条件:城市链表已存在操作结果:将新的城市信息插入到链表中Delete()初始条件:城市链表已存在操作结果:删除链表需要删除的城市信息distance()初始条件:城市链表已存在操作结果:输出给定的一个距离范围内的所有城市信息alter()初始条件:城市链表已存在操作结果:修改链表中的城市信息print()初始条件:城市链表已存在操作结果:打印出城市链表中的所有城市信息begin()操作结果:在屏幕上显示操作功能号2)本程序包含8个函数:①主函数main()②创建城市链表函数CityCreateList()③显示操作功能函数voidbegin()④显示单链表城市信息函数voidprint()⑤插入一个城市函数voidInsert()⑥删除一个城市信息函数voidDelete()⑦查找城市坐标函数voidsearch()⑧修改城市链表函数voidalter()⑧查找一个固定距离范围内的城市voiddistance()各函数间关系如下:4.详细设计#includestdio.h#includemalloc.h#includemath.h#includestdlib.h#includestring.htypedefintstatus;typedefstructdata{charCname;floatx;floaty;}data;typedefstructCityNode{datadata;structCityNode*next;}CityNode,*City;CityL;CityCreateList(){//创建城市链表inti;Cityp;L=(City)malloc(sizeof(CityNode));L-next=NULL;printf(请输入5个城市的数据域:\n);for(i=0;i5;i++){p=(City)malloc(sizeof(CityNode));scanf(%c%f%f,&p-data.Cname,&p-data.x,&p-data.y);getchar();p-next=L-next;L-next=p;}returnL;}voidsearch(){//查找城市坐标charname;Cityp;p=L;printf(请输入需要查找的城市名:\n);scanf(%c,&name);printf(该城市的坐标为:\n);while(p){if(p-data.Cname==name)printf(%f,%f,p-data.x,p-data.y);p=p-next;}}voidInsert(){//插入新的城市Cityp=L-next;Citys=(City)malloc(sizeof(CityNode));printf(请输入要插入的城市名及它的坐标);scanf(%c,%f,%f,&s-data.Cname,&s-data.x,&s-data.y);s-next=p-next;p-next=s;printf(新城市%c插入成功\n,s-data.Cname);}voidDelete(){//删除城市Cityq,p=L-next;intj=0;charz;printf(请输入要删除的城市名:\n);scanf(%c,&z);while(p-data.Cname!=z){q=p;p=p-next;}q-next=p-next;free(p);printf(删除成功!\n);}voiddistance(){//距离范围内的城市floats,d;floatx1,y1,x2,y2;Cityp;p=L-next;printf(请输入中心坐标x1,y1:\n);scanf(%f,%f,&x1,&y1);printf(请输入与中心城市的距离范围d:\n);scanf(%f,&d);while(p){x2=p-data.x;y2=p-data.y;s=sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));if(s=d){printf(与(%f,%f)的中心城市的距离小于等于%f的城市有:\n,x1,y1,d);printf(%c,%f,%f,p-data.Cname,x2,y2);}p=p-next;}}voidalter(){//修改城市节点chara,b;floatm,n;intk=0;Cityp=L;printf(请输入旧的城市名:);scanf(%c,&a);while(p-data.Cname!=a){p=p-next;}printf(请输入新的城市名:\n);scanf(%c,&b);printf(请输入新的城市坐标:\n);scanf(%f,%f,&m,&n);p-data.Cname=b;p-data.x=m;p-data.y=n;}voidprint(){//输出城市链表inti;Citya;charname[10];floatx[10];floaty[10];a=L-next;i=0;while(a){name[i]=a-data.Cname;x[i]=a-data.x;y[i]=a-data.y;a=a-next;printf(%c(%f,%f)\n,name[i],x[i],y[i]);i++;}}voidbegin(){inti;do{printf(\n);printf(--------------------------------------------\n);printf(请选择需要操作的功能:\n);printf(1-输出城市链表信息\n);printf(2-查找\n);printf(3-插入\n);printf(4-删除\n);printf(5-修改\n);printf(6-与坐标P距离小于D的城市\n);printf(0-退出程序\n);printf(--------------------------------------------\n);printf(\n);printf(请输入您选择的功能号:);scanf(%d,&i);getchar();if(i0)switch(i){case1:print();break;case2:search();break;case3:Insert();break;case4:Delete();break;case5:alter();break;case6:distance();break;case0:break;}printf(\n);if(i0)printf(您输入的数值不正确,请重新输入!\n);}while(i!=0);}voidmain(){CreateList();begin();}5.调试分析a.是如何解决的以及对设计与实现的回顾讨论和分析;调试过程中遇到的问题有在写调用函数是函数的形参的类型与实参的类型不一致我经常在很多地方符号丢失改进设想;直接将数值在调用的函数里定义、输入及输出避免在主函数里传实参值,这样就不易出错。b.经验和体会写函数时对指针的应用有些混乱总的来说还是对以前的C语言知识有些遗忘,基础不够扎实导致所发的时间太多了。6.使用说明程序名为Globals,运行环境为VC,每一步都有提示信息提示下一步的实现功能及它的操作输入,当输入错误时有错误提示信息。7.测试结果1)输入数据打印出所有的城市信息2)输入城市名查找出相应的位置坐标3)将一个新的城市信息插入到链表中并打印出改动后的链表中的所有城市信息4)删除一个城市信息并打印出改动后的链表中的所有城市信息5)修改一个旧的城市信息输入新的城市名及坐标,改动后的链表中的所有城市信息6)查找距离城市
本文标题:数据结构城市链表
链接地址:https://www.777doc.com/doc-2109944 .html