数据结构城市链表.docx
- 文档编号:8557377
- 上传时间:2023-01-31
- 格式:DOCX
- 页数:14
- 大小:104.42KB
数据结构城市链表.docx
《数据结构城市链表.docx》由会员分享,可在线阅读,更多相关《数据结构城市链表.docx(14页珍藏版)》请在冰豆网上搜索。
数据结构城市链表
数据结构实验报告
___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.2
C.插入操作中依次输入新的城市名及位置坐标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.7
3.概要设计
1)为了实现上述程序功能,需要定义单链表的抽象数据类型:
ADTLinkList{
数据对象:
D={ai|ai∈IntegerSet,i=0,1,2,…,n,n≥0}
数据关系:
R={
基本操作:
CityCreateList()
操作结果:
构造一个城市链表L,录入五个城市信息.
search()
初始条件:
城市链表已存在
操作结果:
查找是否有与输入值一致的城市名,
若存在,返回城市的位置坐标;
Insert()
初始条件:
城市链表已存在
操作结果:
将新的城市信息插入到链表中
Delete()
初始条件:
城市链表已存在
操作结果:
删除链表需要删除的城市信息
distance()
初始条件:
城市链表已存在
操作结果:
输出给定的一个距离范围内的所有城市信息
alter()
初始条件:
城市链表已存在
操作结果:
修改链表中的城市信息
print()
初始条件:
城市链表已存在
操作结果:
打印出城市链表中的所有城市信息
begin()
操作结果:
在屏幕上显示操作功能号
2)本程序包含8个函数:
①主函数main()
②创建城市链表函数CityCreateList()
③显示操作功能函数voidbegin()
④显示单链表城市信息函数voidprint()
⑤插入一个城市函数voidInsert()
⑥删除一个城市信息函数voidDelete()
⑦查找城市坐标函数voidsearch()
⑧修改城市链表函数voidalter()
⑧查找一个固定距离范围内的城市voiddistance()
各函数间关系如下:
4.详细设计
#include
#include
#include
#include
#include
typedefintstatus;
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;i<5;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(i>0)
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(i<0)
printf("您输入的数值不正确,请重新输入!
\n");
}while(i!
=0);
}
voidmain(){
CreateList();
begin();
}
5.调试分析
a.是如何解决的以及对设计与实现的回顾讨论和分析;
调试过程中遇到的问题有在写调用函数是函数的形参的类型与实参的类型不一致我
经常在很多地方符号丢失
改进设想;
直接将数值在调用的函数里定义、输入及输出避免在主函数里传实参值,这样就不易出错。
b.经验和体会
写函数时对指针的应用有些混乱
总的来说还是对以前的C语言知识有些遗忘,基础不够扎实导致所发的时间太多了。
6.使用说明
程序名为Globals,运行环境为VC,每一步都有提示信息提示下一步的实现
功能及它的操作输入,当输入错误时有错误提示信息。
7.测试结果
1)输入数据打印出所有的城市信息
2)输入城市名查找出相应的位置坐标
3)将一个新的城市信息插入到链表中并打印出改动后的链表中的所有城市信息
4)删除一个城市信息并打印出改动后的链表中的所有城市信息
5)修改一个旧的城市信息输入新的城市名及坐标,改动后的链表中的所有城市信息
6)查找距离城市
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 城市
![提示](https://static.bdocx.com/images/bang_tan.gif)