文档介绍:城市链表实验报告
城市链表实验报告
城市链表实验报告
2014-2015学年
第一学期实验报告
课程名称: 算法与数据结构
实验名称: 城市链表
一、 实验目的
本次实验的主要目的在于熟悉线性表的基本运算在两种存储结构上的实现,其中以熟悉 各种链表的操作为侧重点。同时,通过本次实验帮助学生复习高级语言的使用方法。
二、 实验内容
(一)城市链表 :
将若干城市的信息,存入一个带头结点的单链表。结点中的城市信息包括:城市名,城 市的位置坐标。要求能够利用城市名与位置坐标进行有关查找、插入、删除、更新等操作。
(二) 约瑟夫环
m 的初值为 20;密码:3,1,7,2,6,8,4(正确的结果应为 6,1,4,7,2,3,5)。三、 实验环境
VS2010 、win8、1
四、 实验结果
(一)城市链表:
(1) 创建城市链表;
(2) 给定一个城市名,返回其位置坐标;
(3) 给定一个位置坐标 P 与一个距离 D,返回所有与 P 的距离小于等于 D 的城市。
(4) 在已有的城市链表中插入一个新的城市;
(5) 更新城市信息;
(6) 删除某个城市信息。
(二) 约瑟夫环
m 的初值为 20;密码: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 根据中心城市坐标,返回在距离内的所有城市:
void FindCityDistance(citylist *L){
//根据距离输出城市
……//输入信息与距离
L=L->next;
while(L != NULL){
if(((L->x-x1)*(L->x-x1)+(L->y-y1)*(L->y-y1)<=dis*dis)&&(((L->x-x1)+(L->y-y1))!=0 )){
printf("城市名称%s\n",L->Name);
printf("城市坐标%、2lf,%、2lf\n",L->x,L->y);
}
L=L->next;
}
}
该算法主要用到了勾股定理,考虑到不需要实际数值,只需要大小比较,所以只用
横坐标差的平方+纵坐标差的平方 <= 距离的平方 判定。
因中心城市本身也在判定范围之内,所以添加了判定条件横纵坐标差的与不能为零。
5、3、2
主程序中循环条件判定:
for( ; ; ){
printf("请选择您的操作\n");
printf("1、创建城市链表\n");
printf("2、根据名字查询城市\n");
printf("3、插入\n");