城市链表实验报告Word文档格式.docx

上传人:b****3 文档编号:15138968 上传时间:2022-10-28 格式:DOCX 页数:14 大小:112.52KB
下载 相关 举报
城市链表实验报告Word文档格式.docx_第1页
第1页 / 共14页
城市链表实验报告Word文档格式.docx_第2页
第2页 / 共14页
城市链表实验报告Word文档格式.docx_第3页
第3页 / 共14页
城市链表实验报告Word文档格式.docx_第4页
第4页 / 共14页
城市链表实验报告Word文档格式.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

城市链表实验报告Word文档格式.docx

《城市链表实验报告Word文档格式.docx》由会员分享,可在线阅读,更多相关《城市链表实验报告Word文档格式.docx(14页珍藏版)》请在冰豆网上搜索。

城市链表实验报告Word文档格式.docx

(一)城市链表:

(1)创建城市链表;

(2)给定一个城市名,返回其位置坐标;

(3)给定一个位置坐标P和一个距离D,返回所有与P的距离小于等于D的城市。

(4)在已有的城市链表中插入一个新的城市;

(5)更新城市信息;

(6)删除某个城市信息。

3,1,7,2,6,8,4

输出6,1,4,7,2,3,5。

五、附录

城市链表:

5.1问题分析

该实验要求对链表实现创建,遍历,插入,删除,查询等操作,故使用单链表。

5.2设计方案

该程序大致分为以下几个模块:

1.创建城市链表模块,即在空链表中插入新元素。

故创建城市链表中包涵插入模块。

2.返回位置坐标模块。

3.计算距离模块

4.插入模块。

5.更新城市信息模块

6.删除信息模块。

5.3算法

5.3.1根据中心城市坐标,返回在距离内的所有城市:

voidFindCityDistance(citylist*L){

//根据距离输出城市

……//输入信息与距离

L=L->

next;

while(L!

=NULL){

if(((L->

x-x1)*(L->

x-x1)+(L->

y-y1)*(L->

y-y1)<

=dis*dis)&

&

(((L->

y-y1))!

=0)){

printf("

城市名称%s\n"

L->

Name);

城市坐标%.2lf,%.2lf\n"

x,L->

y);

}

}

}

该算法主要用到了勾股定理,考虑到不需要实际数值,只需要大小比较,所以只用

横坐标差的平方+纵坐标差的平方<

=距离的平方判定。

因中心城市本身也在判定范围之内,所以添加了判定条件横纵坐标差的和不能为零。

5.3.2

主程序中循环条件判定:

for(;

;

){

printf("

请选择您的操作\n"

);

1.创建城市链表\n"

2.根据名字查询城市\n"

3.插入\n"

4.删除\n"

5.更新城市信息\n"

6.根据离中心坐标距离查看城市\n"

7.退出系统\n"

scanf("

%d"

&

choice);

switch(choice){

……//case语句

case7:

break;

if(choice==7)

break;

若用户选择了退出系统选项,则首先跳出switch在跳出for循环结束程序。

5.4流程图

5.5程序源代码

typedefstructcitylist{

charName[20];

doublex,y;

citylist*next;

}citylist,*L;

voidInitList_SqCity(citylist*L){

//初始化节点

L->

next=NULL;

voidInsert_sqCity(citylist*L){

//在链表中插入元素

citylist*newNode;

newNode=(citylist*)malloc(sizeof(citylist));

if(!

newNode)

存储分配失败"

printf("

请输入城市名\n"

scanf("

%s"

newNode->

请输城市坐标xy\n"

%lf%lf"

(newNode->

x),&

y));

while(L->

next!

=NULL){

L=L->

}//如果非空,L指针的位置向后移

newNode->

next=L->

next=newNode;

voidCreate_sqCity(citylist*L){

//创建链表charch[100];

inti;

输入END退出,输入其余值继续\n"

//当输入END时,在任意输入,则退出此操作

ch);

for(;

strcmp(ch,"

END"

)!

=0;

){

Insert_sqCity(L);

voidGet_sqCityCoord(citylist*L){

//输入城市信息返回坐标

charch[10];

输入要查询的城市"

next!

=NULL&

strcmp(L->

next->

Name,ch)){

if(L->

next==NULL)

城市不存在"

else{

%.2lf,%.2lf\n"

voidDelete_sqCity(citylist*L){

//删除城市信息,按名称/坐标

=NULL&

//删除位置不合理

next=L->

删除城市成功"

//根据距离输出城市

输入中心城市坐标"

doublex1,y1;

x1,&

y1);

输入距离"

doubledis;

%lf"

dis);

if(((L->

voidUpdate_sqCity(citylist*L){

//更新城市信息

请输入您要更新的城市名\n"

scanf("

while(strcmp(L->

城市不存在\n"

请输入城市新信息:

\n"

请输入城市新名\n"

请输入城市新坐标\n"

(L->

}

intmain(){

citylist*L;

L=(citylist*)malloc(sizeof(citylist));

InitList_SqCity(L);

for(;

-----------------------------------\n"

intchoice;

case1:

Create_sqCity(L);

getchar();

case2:

Get_sqCityCoord(L);

case3:

Insert_sqCity(L);

case4:

Delete_sqCity(L);

case5:

Update_sqCity(L);

case6:

FindCityDistance(L);

case7:

5.6仿真结果

2.查询城市信息

3添加城市

4删除城市

5更新城市

6根据距离输出城市

5.7调试心得

5.7.1错误分析:

实验中出现的第一个问题是声明变量,从键盘中读入数据是显示变量未初始化,调试后发现是scanf的问题,以后的实验中应注意scanf中读入信息后是存到了地址里。

5.7.2算法复杂度的分析:

所有程序除了InitList_SqCity复杂度为O

(1),其余均为O(n)。

5.7.3收获

对数据结构这门课地应用有了一定地了解,知道对线性表插入、删除等操作的实现,加深对课本地理解。

附录

约瑟夫环:

5.1问题分析

该实验要求循环连续查找信息,并删除节点,故使用单项循环链表。

5.2设计方案

1.建立单循环链表

2.产生Joseph环

3.输出顺序表

5.3算法

5.3.1构成单链表

voidCreat_JoephLink(intnum){

Node*head,*q,*L;

L=(Node*)mall

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > PPT模板 > 中国风

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1