城市实验报告.docx
- 文档编号:6836484
- 上传时间:2023-01-11
- 格式:DOCX
- 页数:8
- 大小:50.18KB
城市实验报告.docx
《城市实验报告.docx》由会员分享,可在线阅读,更多相关《城市实验报告.docx(8页珍藏版)》请在冰豆网上搜索。
城市实验报告
实验一线性表
实验目的:
本次实习的主要目的在于熟悉线性表的基本运算在两种存储结构上的实现,其中以熟悉各种链表的操作为侧重点。
通过本次实习还可帮助读者复习高级语言的使用方法。
实验内容:
城市链表
[问题描述]
将若干城市的信息,存入一个带头结点的单链表。
结点中的城市信息包括:
城市名,城市的位置坐标。
要求能够利用城市名和位置坐标进行有关查找、插入、删除、更新等操作。
[基本要求]
(1)给定一个城市名,返回其位置坐标;
(2)给定一个位置坐标P和一个距离D,返回所有与P的距离小于等于D的城市。
intMenu()
{
intchoice;
printf("************************\n");
printf("1.新建\n");
printf("2.根据城市名查找\n");
printf("3.根据离中心坐标距离查找\n");
printf("4.输出城市链表\n");
printf("5.退出\n");
printf("============================\n");
printf("请选择:
");
scanf("%d",&choice);
returnchoice;
}
程序如下所示:
#include
#include
#include
#include
#include
#include
/*函数结果状态代码*/
#defineTRUE1
#defineFALSE0
#defineOK1
#defineERROR0
#defineINFEASIBLE-1
/*#defineOVERFLOW-2因为在math.h中已定义OVERFLOW的值为3,故去掉此行*/
structxinxi
{
intx;
inty;
};
structLNode
{
charname[40];
structxinxizuobiao;
structLNode*next;
};
TypedefstructLNode*LinkList;/*另一种定义LinkList的方法*/
intInitList(LinkList*L)/*操作结果:
构造一个空的线性表L*/
{
*L=(LinkList)malloc(sizeof(structLNode));/*产生头结点,并使L指向此头结点*/
if(!
*L)/*存储分配失败*/
exit(OVERFLOW);
(*L)->next=NULL;/*指针域为空*/
returnOK;
}
intDestroyList(LinkList*L)/*初始条件:
线性表L已存在。
操作结果:
销毁线性表L*/
{
LinkListq;
while(*L)
{
q=(*L)->next;
free(*L);
*L=q;
}
returnOK;
}
intClearList(LinkListL)/*不改变L*//*初始条件:
线性表L已存在。
操作结果:
将L重置为空表*/
{
LinkListp,q;
p=L->next;/*p指向第一个结点*/
while(p)/*没到表尾*/
{
q=p->next;
free(p);
p=q;
}
L->next=NULL;/*头结点指针域为空*/
returnOK;
}
intListEmpty(LinkListL)
{/*初始条件:
线性表L已存在。
操作结果:
若L为空表,则返回TRUE,否则返回FALSE*/
if(L->next)/*非空*/
returnFALSE;
else
returnTRUE;
}
intListLength(LinkListL)
{/*初始条件:
线性表L已存在。
操作结果:
返回L中数据元素个数*/
inti=0;
LinkListp=L->next;/*p指向第一个结点*/
while(p)/*没到表尾*/
{
i++;
p=p->next;
}
returni;
}
intGetElem(LinkListL,chara[],xinxi*b)/*算法2.8*/
{/*L为带头结点的单链表的头指针。
给定一个城市名,用b返回其位置坐标并返回OK,否则返回ERROR*/
LinkListp=L->next;/*p指向第一个结点*/
while(p&&strcmp(p->name,a)!
=0)/*顺指针向后查找,直到p指向给定一个城市名或p为空*/
{
p=p->next;
}
if(!
p||strcmp(p->name,a)!
=0)/*给定一个城市名不存在*/
returnERROR;
*b=p->zuobiao;/*用b返回其位置坐标*/
returnOK;
}
voidCreateList(LinkList*L,intn)
{/*正位序(插在表尾)输入n个元素的值,建立带表头结构的单链线性表*/
inti;
LinkListp,q;
*L=(LinkList)malloc(sizeof(structLNode));/*生成头结点*/
(*L)->next=NULL;
q=*L;
printf("请输入%d个数据(格式为:
城市名横坐标纵坐标)\n",n);
for(i=1;i<=n;i++)
{
p=(LinkList)malloc(sizeof(structLNode));
scanf("%s%d%d",p->name,&(p->zuobiao.x),&(p->zuobiao.y));
q->next=p;
q=q->next;
}
p->next=NULL;
}
intMenu()
{
intchoice;
printf("************************\n");
printf("1.新建\n");
printf("2.根据城市名查找\n");
printf("3.根据离中心坐标距离查找\n");
printf("4.输出城市链表\n");
printf("5.退出\n");
printf("============================\n");
printf("请选择:
");
scanf("%d",&choice);
returnchoice;
}
voidjuli(LinkListL,intn)
{
LinkListp=L->next;
inta,b,d;
doubles;
printf("请输入给定的位置坐标P:
");
scanf("%d%d",&a,&b);
printf("请输入给定的距离D:
");
scanf("%d",&d);
while(p)
{s=sqrt(pow(p->zuobiao.x-a,2)+pow(p->zuobiao.y-b,2));
if(s<=d)
puts(p->name);
p=p->next;
}
}
voidprint(LinkListL)
{
LinkListp=L->next;
while(p)
{
printf("%s%d%d\n",p->name,p->zuobiao.x,p->zuobiao.y);
//遍历线性表,本函数是输出,根据问题的需要,进行其他的操作
p=p->next;
}
}
voidmain()
{
intn,k,i=1;
LinkListL;
charcity[40];
xinxib;
printf("请输入链表L的元素个数(即城市个数)n=");
scanf("%d",&n);
while(i)
{
k=Menu();
switch(k)
{
case1:
CreateList(&L,n);
printf("L=");
print(L);
break;
case2:
printf("请输入城市名:
");
scanf("%s",city);
GetElem(L,city,&b);
printf("x=%d,y=%d\n",b.x,b.y);
break;
case3:
juli(L,n);break;
case4:
print(L);break;
case5:
break;
}
}
}
结果输出:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 城市 实验 报告