城市问题.docx
《城市问题.docx》由会员分享,可在线阅读,更多相关《城市问题.docx(9页珍藏版)》请在冰豆网上搜索。
城市问题
盐城师范学院信息科学与技术学院
实验报告
课程名称算法与数据结构实验2011-2012学年第一学期
班级
104
学号
姓名
实验地点
4#303
实验日期
10.13
实验学时
2
实验名称
链表知识的应用
实验类型
□验证性□综合性□设计性
实验目的:
巩固链表知识,提高对链表的知识应用
实验环境:
(包括软件平台和硬件平台)
软件平台:
VC6.0++,windowsXP操作系统
硬件环境:
实验内容(应包括实验题目、算法描述、实验过程等)
实验题目:
将若干城市信息存入一个带有结点的单链表,结点中的城市信息包括城市名以及城市的位置坐标,要求:
1给一个城市名,返回其位置坐标
2给一个位置坐标P和一个距离D,返回所有与P的距离小于等于D的城市
算法描述:
程序分为三个部分,第一个是程序的入口主函数,第二个链表实现的部分
实验过程:
编写代码——程序调试——进行修改——程序运行
实验结果及分析:
界面显示如下:
输入的值为1,并输入相关城市与城市的坐标,显示出来的数据,如下:
选择的数据为2,测试如下:
选择的数据为3,进行测试,测试如下:
成绩教师签名日期
附录(可包括源程序清单或其它说明)
#include
#include
#include
typedefstructsNode
{
charsname[10];
structposition
{
floatx;
floaty;
}position;
}Elemtype;
typedefstructNode
{
Elemtypedata;
structNode*next;
}LNode,*LinkList;
voidinitList(LinkList*l)
{
*l=(LinkList)malloc(sizeof(LNode));//初始化链表。
(*l)->next=NULL;
}
voidreaddata(LinkListp)//输入每一个节点的数据项。
{
cout<<"name:
";
cin>>p->data.sname;
cout<<"Position:
";
cin>>p->data.position.x>>p->data.position.y;
}
voidwritedata(LinkListp)//显示节点数据项。
{
cout<data.sname<cout<data.position.x<<""<data.position.y<}
voidcreateList(LinkListL)//创建链表。
{
inti;
LinkListp;
for(i=1;i<5;i++)
{
p=(LinkList)malloc(sizeof(LNode));
cout<<"请输入第"<
readdata(p);
p->next=L->next;
L->next=p;
}
}
voidvisitList(LinkListL)//访问链表。
{
LinkListp;
p=L->next;
while(p)
{
writedata(p);
p=p->next;
}
}
voidgetList(LinkListL,charname[10])//给出城市名输出城市坐标。
{
LinkListp;
p=L->next;
while(p)//如果输入的名称和链表中的城市名称相同那么执行循环语句。
{
if(strcmp(p->data.sname,name))
p=p->next;//指针后移。
elsebreak;
}
if(!
p)
cout<<"你查找的城市不存在!
!
!
"<else
cout<data.position.x<<""<data.position.y<}
voiddisList(LinkListL,floatx,floaty,floatz)//任给一个城市坐标,和距离显示所有小于该距离的城市名称。
{
LinkListp;
intcount=0;
p=L->next;
floatq;
q=(p->data.position.x-x)*(p->data.position.x-x)+(p->data.position.y-y)*(p->data.position.y-y);
while(p)//当链表不为空,执行while循环。
{
if(q<=z*z)//如果两个城市的距离小于给定的距离则把该城市的名称输出
{
cout<data.sname<count++;
}
p=p->next;
}
if(count)
cout<<"附近的城市有:
"<else
cout<<"周围查不到少于这个距离的城市!
"<}
voidmain()
{
floatx,y,z;
charname[10];
LinkListL;
cout<<"1输入城市名称和坐标"<cout<<"2输入城市名称返回城市坐标"<cout<<"3给定一个城市坐标和一个距离输出该距离内的所有城市名称"<initList(&L);
while
(1)
{
intw;
cin>>w;
switch(w)
{
case1:
cout<<"输入城市的名字和坐标"<createList(L);
break;
case2:
cout<<"请输入城市名,你将会得到它的坐标:
"<cin>>name;
getList(L,name);
break;
case3:
cout<<"输入一个坐标和距离,你将会得到少于这个距离的城市名:
"<cin>>x>>y>>z;
disList(L,x,y,z);
break;
}
}
}