数据结构 课程设计报告(城市地铁设计)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数据结构课程设计报告
学院:计算机科学与工程
专业:计算机科学与技术
班级:09级班
学号:
姓名:
指导老师:
时间: 2010年12月
一、课程设计题目:
1、哈夫曼编码的实现
2、城市辖区地铁线路设计
3、综合排序算法的比较
二、小组成员:
三、题目要求:
1.哈夫曼编码的实现
(1)打开若干篇英文文章,统计该文章中每个字符出现的次数,进一步统一各字符出现的概率。
(2)针对上述统计结果,对各字符实现哈夫曼编码
(3)对任意文章,用哈夫曼编码对其进行编码
(4)对任意文章,对收到的电文进行解码
2.某城市要在其各个辖区之间修建地铁来加快经济发展,但由于建设地铁的费用昂贵,因此需要合理安排地铁的建设路线。
(1)从包含各辖区的地图文件中读取辖区的名称和各辖区的直接距离
(2)根据上述读入的信息,给出一种铺设地铁线路的解决方案。使乘客可以沿地铁到达各个辖区,并使总的建设费用最小。
(3)输出应该建设的地铁路线及所需要建设的总里程信息。
3.综合排序算法的比较
各种内部排序算法的时间复杂度分析结果只给出了算法执行时间的阶,或大概的执行时间。试通过随机的数据比较各算法的关键字比较次数和关键字移动的次数。
(1)对以下各种常用的内部排序算法进行比较:
直接插入排序,折半插入排序,二路归并排序,希尔排序,冒泡排序,快速排序简单选择排序,堆排序,归并排序,基数排序。
(2)待排序的表长不少于100,要求采用随机数。
(3)至少要用5组不同的输入数据做比较:比较的次数为有关键字参加的比较次数和关键字移动的次数
(4)改变数据量的大小,观察统计数据的变化情况。
(5)对试验统计数据进行分析。对各类排序算法进行综合评价。
四、项目安排:
1、小组内分工合作
分工:负责哈夫曼编码的实现,负责城市辖区地铁线路设计,负责综合排序算法的比较。
合作:组内,组外进行交流,组长帮助解决组员的在项目过程中的困难,并控制进度。
五、完成自己的任务:
任务:城市辖区地铁线路设计
1.实现方案
创建城市辖区图
表信息
将信息写入文件
从文件读取信息最优路径的选择输出最优路
径的相关信
息
在整个编程中,我是通过手动输入的方式把数据写到文件中,而不是直接从文件中读取,这个不是题目要求的,但是我想当拿到数据之后都要对数据进行处理,干脆直接手动输入得出结果。
在这个代码中,最重要的是铁路线路的最优设计。在这个代码的实现中,我用了Kruscal的想法,然后通过函数的嵌套实现最优路径的选取的。
2.代码的实现
#include
#include
#include
#include
#include
#define MAXSIZE 100
typedef struct link
{
int connect;
int fee;//费用
struct link *next;
}edgenode;
typedef struct node
{
char name[10];//名称
edgenode *link;
}city;
typedef struct
{
city vex[MAXSIZE];
int city_n,city_e;
}city_graph;
city_graph ga;
int total_fee=0;//记录总费用
void creat(city_graph *ga)//创建辖区总信息
{
int i=0 ,a,b;
edgenode *q;
edgenode *p;
printf("请输入城市辖区个数: ");//城市中辖区的个数
scanf("%d",&ga->city_n);
printf("请输入城市辖区间路径的总个数: ");//辖区间的路径scanf("%d",&ga->city_e);
for(i=1;i
{
printf("请输入第%d个城市辖区名称: ",i);
scanf("%s",ga->vex[i].name);
ga->vex[i].link=NULL;
}
for(i=0;i
{
printf("请输入第%d组两个相邻辖区的编号",i+1);//还没有处理数据,比如输入的是超出规定范围的数据
p=(edgenode *)malloc(sizeof (edgenode ));
q=(edgenode *)malloc(sizeof (edgenode ));
scanf("%d%d",&a,&b);
printf("请输入两辖区间的费用:");//两辖区间路程的费用
scanf("%d",&p->fee);
q->fee=p->fee;
p->connect=b;
q->connect=a;
p->next=ga->vex[a].link;//建立两辖区间的联系
ga->vex[a].link=p;
q->next=ga->vex[b].link;
ga->vex[b].link=q;
}