- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
《数据结构》课程设计报告
题目:航班信息查询与检索
专业: 班级: 学号: 姓名:
任课老师:
2010 年 12 月 26 日
2
2
目录
TOC \o 1-2 \h \z \u 一、设计题目 1
二、设计要求 2
三、概要设计 2
设计思路 2
流程图 2
四、详细设计 3
定义数据类型 3
算法实现 3
五、测试数据 6
录入航班信息 6
航班信息查询 7
六、收获与体会 8
一、设计题目
设计一个航班信息查询与检索系统。可按航班的航班号、起点站、终点站、起飞时间以及到达时间等信息进行查询。
二、设计要求
1、每个航班记录包括八项:航班号、起始站、终点站、班期、起飞时间、到达时间、飞机型号、票价。如下表所示:
航班信息表
航班号 起点站 终点站 航班期 起飞时机 到达时间 机型 票价CA1544 合肥 北京 1.2.5 1055 1240 733 960
2、要有输入模块。
3、对航班信息进行排序与查找。
三、概要设计
1、设计思路
根据题目所要求,程序必须实现航班信息的录入和查询。程序首先定义了一个用于储存航班信息的数据类型,再由用户录入航班数据,在录入的同时并对数据进行排序,最后执行数据查询和检索。在查询设计中,使用二分查找法对排好序的航班数据按航班号实现快速查找,按起点站、终点站、起飞时间、到达时间
查找的则采用顺序查询方法。
2、流程图
定义数据类型数据输入、排序
定义数据类型
数据输入、排序
接受查找条件、查找
关键字
输出查3找结果
PAGE
PAGE 10
四、详细设计
1 . 定义数据类型
根据设计要求,设计中所用到的数据记录只有航班信息,因此要定义相关的数据类型:
typedef struct {
char start[6]; //起点站
char end[6]; //终点站
char sche[10]; //航班期
char time1[5]; //起飞时间
char time2[5]; //到达时间
char model[4]; //机型
int price; //票价
}infotype; //航班记录类型
typedef struct{
keytype keys[keylen]; //关键字infotype others;
int next;
}slnode; //表结点
typedef struct{
slnode sl[maxspace]; //静态链表,s1[0]为头结点
int keynum; //关键字长
int length; //当前表长
}sllist; //静态链表类型
为了进行基数排序,需要定义在分配和收集操作时用到的指针数组: typedef int arrtype_n[10]; //十进制数字指针数组typedef int arrtype_c[26]; //26 个字母指针数组
2 . 算法实现
(1)一趟分配算法
void distribute(slnode *sl,int i,arrtype_n f,arrtype_n e)
{
int j,p; for(j=0;jradix_n;j++)
{
f[j]=e[j]=0;
}
for(p=sl[0].next;p;p=sl[p].next)
{
j=sl[p].keys[i]%48; //将数字字符转化为对应的数值型数字if(!f[j])
f[j]=p; else
sl[e[j]].next=p;
e[j]=p; //将 p 指向的结点插入到第 j 个结点
}
}
(2)一趟收集算法
void collect(slnode *sl,int i,arrtype_n f,arrtype_n e)
{
int j,t;
for(j=0;!f[j];j++); //找第一个非空子表sl[0].next=f[j];
t=e[j]; while(jradix_n-1)
{
for(j=j+1;jradix_n-1!f[j];j++); if(f[j])
{
sl[t].next=f[j]; t=e[j];
}
}
//找下一个非空子表
//链接两个非空子表
sl[t].next=0;
}
(3)链式基数排序算法
void radixsort(sllist l)
{
int i;
arrtype_n fn,en; arrtype_c fc,ec; for(i=0;il.length;i++)
l.sl[i].next=i+1; l.sl[l.length].next=0; for(i=l.keynum-1;i=2;i--)
{
//将普通的线性表改为静态链表
//按最低位优先依次对各关键字进行分配和收集
distribute(l.sl,i,fn,en); coll
原创力文档


文档评论(0)