ImageVerifierCode 换一换
格式:DOCX , 页数:26 ,大小:203.95KB ,
资源ID:22853307      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/22853307.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(航班信息的查询与检索Word下载.docx)为本站会员(b****7)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

航班信息的查询与检索Word下载.docx

1、 /航班记录类型 typedef struct KeyType keyskeylen; /关键字 InfoType others; int next; slnode; /表结点 SLNode slMaxSpace; /静态链表,s10为头结点 int keylen; /关键字长 int length; /当前表长 SLList; /静态链表类型 为了进行基数排序,需要定义在分配和收集操作时用到的指针数组:typedef int ArrType_n10; /十进制数字指针数组 typedef int ArrType_c26; /26个字母指针数组3.3 实现排序的各函数的说明1)一趟分配函数:v

2、oid Distribute(SLNode *s1,int i,ArrType f,ArrType e);/本算法是按关键字keyi建立RADIX个子表,使同一个子表中记录的keysi/相同,f0.RADIX和e0.RADIX分别指向各子表中的第一个和最后一个记录 2)一趟搜集函数:void Collect(SLNode *s1,int i,ArrType f,ArrType e);/本算法是按关键字keysi从小到大将0.RADIX所指的各子表依次链接成一个链表 3)链式基数排序函数:void RadixSort(SLList &L);/本算法是按关键字从低位到高位依次对各关键字进行分配和收

3、集,分两段实现 4)二分查找函数: int BinSearch(SLList L,KeyType key);/L为待查找的表,key为待查找的关键字,按二分查找的思想实现查找 5)主控函数 void main() 初始化;数据输入;排序处理;接受查找要求及查找关键字;查找处理;输出查找结果; 4 详细设计4.1 数据类型的定义根据设计要求我们知道所用的记录中只有航班信息因此要定义相关的数据类型其源程序如下 typedef struct char start6;/起点 char end6;char sche10;/班期 /起飞时间 /到达时间 /机型 infotype; /航班记录类型 type

4、def struct keytype keyskeylen;/关键字航班号 infotype others;slnode; /静态链表类型 slnode slmaxspace;/静态链表sl0为头结点 int keynum; /记录当前关键字字符个数 /当前表长 sllist; typedef int arrtype_nradix_n;/十进制数字指针 typedef int arrtype_cradix_c;/26个字母指针4.2 链式基数排序 否 是4.3 重新整理静态链表重新整理静态链表,P指示第一个记录的当前位置,L.s11.i-1已按关键字有序排列 ,第一个记录在L中的当前位置应不小

5、于i,使用while循环,找到第i个记录,并用p指示其在L中的当前位置,而q指示尚未调整的表尾,若if(p!=i) 则p指向被移走的记录,使得以后可由while循环找回 ,当p=q时,p指向尚未调整的表尾,为找到第i+个记录做准备 4.4 查找算法实现4.4.1 二分查找函数 是 是4.4.2 顺序查找函数void SeqSearch(SLList L,KeyType key,int i) int j,k,m=0; for(j=1;j=1 & i=5) *nprintf(* 航班信息查询系统 *n* 1 航班号 *n* 2 起点站 *n* 3 终点站 *n* 4 起飞时间 *n* 5 到达时间

6、 *n* 0 退出系统 *n*n 请选择0-5:n scanf(%d,&i);switch(i) case 1: printf(输入要查的航班号(字母要大写): scanf(%s,key);k=BinSearch(L,key); Display(L,k);case 2:输入要查询的航班起点站名:SeqSearch(L,key,i); break;case 3:输入要查询的航班终点站点: SeqSearch(L,key,i);case 4:输入要查询的航班起飞时间:,k1); SeqSearch(L,k1,i);case 5:输入要查询的航班到达时间:case 0:再 见! n return 0

7、;void InputData(SLList &L) int i=+L.length;char yn=y;while(yn= | yn=Y) printf(航班号 起点站 终点站 航班期 起飞时间 到达时间 机型 票价n%s%s%s%s%s%s%s%d,L.s1i.keys,L.s1i.others.start, L.s1i.others.end,L.s1i.others.sche,L.s1i.others.time1, L.s1i.others.time2,L.s1i.others.model,&L.s1i.others.price);+i;继续输入吗? y/n:%cyn);L.length

8、=i-1; 5 运行与测试航班信息输入如图:按航班号查询:输入航班号错误则显示如下图:按航班起点站查询:按起飞时间查询:显示查询主菜单,退出查询系统:6 总结与心得 通过本实验,我了解了基数排序是作为一种内部排序方法,当关键字位数较少而排序序列较长时,该排序算法有一定的优越性。而对于有序序列的查找算法,二分查找是一种效率比较高的方法。在本实验中,对这两种算法的应用,我加深了对他们的理解,掌握了他们的实现方法。 在本次实验过程中,输入错误还是存在的问题,但能很快的通过编译解决,一些编译不能发现的问题,在组建过程中也能发现并解决。这次实验的过程中遇到了很多问题,定义的过程中存在定义不清楚的问题,还

9、有一些模糊定义和重定义的问题出现。在程序的定义过程中,存在着函数的调用失败的问题,在调用过程中不能正常调用,通过把调用的函数直接用在程序中,不通过调用的方法,使得程序正常运行。本次实验的问题只要通过调试和对整个程序的理解,便可以解决所有的发现的问题 本次实验利用二分查找法很快的完成了对航班信息的查找,使我们对二分查找有了一个很好的掌握。其查找过程是先确定待查记录所在的范围(区间),然后逐步缩小范围直到找到或找不到该记录为止。 在实验过程中,程序中许多定义需要我们有一个很仔细的了解,比如上述的对字符长度的定义,这需要对所定义的对象给一个合理的字符长度,在输入的过程中才不会出现因输入的字符长度过长

10、而不能识别。本次实验中用到了静态链表,定义静态链表的过程中,需要有一个很熟悉的了解,知道静态链表是如何定义以及如何实现。通过这次实验,使得对于查找以及检索有了一个很好的掌握,让我们在以后的程序设计过程中对于类似的函数定义有一个很清晰的过程以及了解。7 参考文献1)徐孝凯,魏荣数据结构,机械工程出版社2) 谭浩强程序设计,北京大学出版社 3) 杨路明C语言程序设计教程,北京邮电大学出版社.4) 耿国华数据结构-C语言描述,高等教育出版社8 附录(程序源代码)#include string.h#define MaxSpace 100#define keylen 7#define RADIX_n 1

11、0#define RADIX_c 26typedef char KeyType;char start6; /起点 /终点 /班期 /起飞时间 /到达时间 /机型 /票价InfoType;typedef struct /关键字(航班号)int next;SLNode; /静态链表结点类型 /静态链表,s10为头结点 /记录当前关键字字符个数SLList;typedef int ArrType_nRADIX_n; /十进制数字指针数组typedef int ArrType_cRADIX_c;/ 一趟数字字符分配函数void Distribute(SLNode *sl,int i,ArrType_n

12、 f,ArrType_n e)int j,p;for(j=0;RADIX_n; /各子表置为空表fj=ej=0;for(p=sl0.next;p;p=slp.next)j=slp.keysi%48; /将数字字符转换成相对应的数值型数字if(!fj)fj=p;elseslej.next=p;ej=p; /将p指向的结点插入到第j个子表中/ 一趟数字字符的收集函数void Collect(SLNode *sl,int i,ArrType_n f,ArrType_n e)int j,t;!fj;j+) /找第一个非空子表sl0.next=fj; /s10.next指向第一个非空子表中的一个结点t=

13、ej;while(jRADIX_n-1)for(j=j+1;RADIX_n-1&j+) /找下一个非空子表if(fj)slt.next=fj; t=ej; /链接两个非空子表slt.next=0; /t指向最后一个非空子表中的最后一个结点/ 一趟字母字符分配函数void Distribute_c(SLNode *sl,int i,ArrType_c f,ArrType_c e)RADIX_c;j=slp.keysi%65; /将字母字符转换成在字母集中相应的序号(0-25)/ 一趟字母字符收集void Collect_c(SLNode *sl,int i,ArrType_c f,ArrType

14、_c e)j+);RADIX_c-1)RADIX_c-1&/链式基数排序函数L)/链式int i;ArrType_n fn,en;ArrType_c fc,ec;for(i=0;i=2;i-) /按最低位优先次序对各关键字进行分配和收集,先做低4位数字部分Distribute(L.sl,i,fn,en);Collect(L.sl,i,fn,en);for(i=1;=0; /对高位的2位大写字母进行分配和收集Distribute_c(L.sl,i,fc,ec);Collect_c(L.sl,i,fc,ec);/按指针链重新整理静态链表void Arrange(SLList &L) /重新整理in

15、t p,q,i;SLNode temp;p=L.sl0.next; /p指向第一个记录的当前位置i+) /l.s11i-1已按关键字有序化while(pi)p=L.slp.next; /找到第i个记录,并用p指向其在L中当前位置q=L.slp.next; /q指向尚未调整的表尾if(p!=i)temp=L.slp; L.slp=L.sli; L.sli=temp; L.sli.next=p; /交换记录p=q; /p指向尚未调整的表尾,为找第i+1个记录做准备/ 二分查找函数int BinSearch(SLList L,KeyType key)int low,high,mid;low=1;hi

16、gh=L.length;while(low=high)mid=(low+high)/2;if(strcmp(key,L.slmid.keys)=0)return mid;else if(strcmp(key,L.slmid.keys)=1&=5) *n * 航班信息查询系统 *n * 1.航 班 号 *n * 2.起 点 站 *n * 3.终 点 站 *n * 4.起飞时间 *n * 5.到达时间 *n * 0.退出系统 *n 请选择(0-5):输入要查询的航班号(字母要大写): 无此航班信息,可能是输入错误!,L.slk.keys,L.slk.others.start,L.sl k.others.end,L.slk.others.sche,L.slk.others.time1,L.slk.others.time2,L.sl k.others.model,L.slk.others.price);输入要

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

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