数据结构课程设计航班信息的查询与检索

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

目录

第1章概述 (2)

第2章设计要求与分析 (2)

2.1设计要求 (2)

2.2设计分析 (3)

2.2.1定义数据类型 (3)

2.2.2实现排序的个函数说明 (4)

第3章算法实现 (4)

3.1 一趟分配算法 (4)

3.2 一趟收集算法 (5)

3.3 链式基数排序算法 (5)

3.4 二分查找的函数定义 (6)

第4章程序代码 (7)

第5章运行与测试 (7)

第6章实验反思 (10)

参考文献 (11)

第1章概述

排序和查找是在数据信息处理中使用频度极高的操作。为了加快查找的速度,需要先对数据记录按关键字排序。当今乘飞机旅行的人越来越多,人们需要关心了解各类航班的班次、

时间、价格及机型等信息。在这个飞机航班数据的信息模型中,航班号是关键字,而且是具有结构特点的一类关键字。因为航班号是字母数字混变的,例如CZ3869,这种记录集合是一个适合与多关键字排序的例子。

第2章设计要求与分析

2.1设计要求

该设计要求对飞机航班信息进行排序和查找.可按航班的航班号、起点站、到达站、起飞时间以及到达时间等信息进行查询。

对于本设计,可采用基数排序法对一组具有结构特点的飞机航班号进行排序,利用二分查找法对排好序的航班记录按航班号实现快速查找,按其他词关键字的查找可采用最简单的顺序查找方法进行,因为他们用的较少。

每个航班记录包括八项,分别是:航班号、起点站、终点站、班期、起飞时间、到达时间、飞机型号以及票价等,假设航班信息表如下表所示:

其中航班号一项的格式为:

其中k0和k1的输入值是航空公司的别称,用两个大写字母表示,后4位为航班表号,这种航班号关键字可分成两段,即字母和数字。其余七项输入容因为不涉及本设计的核心,因此除了票价为数值型外,均定义为字符串型即可。

2.2设计分析

2.2.1定义数据类型

根据设计要求,我们知道设计中所用到的数据记录只有航班信息,因此要定义行管的数

据类型:

Typedef struct{

Char start[7];

Char end[7];

Char sche[12];

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 s1[MaxSpace];

Int keylen;

Int length;

}SLList;

为了进行基数排列,需要定义在分配和手机操作使用到的指针数组:

Typedef int ArrType_n[10];

Typedef int ArrType_.c[26];

2.2.2实现排序的个函数说明

(1)一趟分配函数:

Void Distribute(SLNode *s1,int I,ArrType f,ArrType e);

//本算法是按关键字keys[i]建立RADIX个子集,是同一个子集中记录的keys[i]相同,//f[0..RADIX]和e[0..RADIX]分别指向各自表中的第一个和最后一个记录

(2)一趟搜集函数:

Void Collect(SLNode *s1,int i,ArrType f,ArrType e);

//本算法是按关键字keys[i]从小到大将[0..RADIX]所指的各子表一次连接成一个链表(3)链式基数排序函数:

Void RadixSort(SLList &L);

//本算法是按关键字从低位到高位依次对各关键字进行分配和收集,分两端实现

(4)二分查找函数:

Int BinSerach(SLList L,KeyType key[]);

//L为待查找的表,key[]为待查找的关键字,按二分查找的思想实现查找

(5)主控函数:

Void main()

{

初始化;

数据输入;

排序处理;

接受查找要求及查找关键字;

查找处理;

输出查找结果;

}

第3章算法实现

3.1 一趟分配算法

Void Distribute(SLNode *s1,int I,ArrType f,ArrType e) {

Int j,p;

For(j=0;j

{//分子表初始化为空表

F[j]=0;

E[j]=0;

}

For(p=s1[0].next;p;p=s1[p].next)

{

J=s1[p].keys[i]%48;

If(!f[j])

F[j]=p;

Else

S1[e[j]].next=p;

E[j]=p;

}

}

3.2 一趟收集算法

Void Colect(SLNode *s1,int I,ARRType f,ArrType e) {

Int j,t;

For(j=0;!f[j];j++);

S1[0].next=f[j];t=e[j];

While(j

{

For(j=j+1;j

If(f[j]){s1[t].next=f[j];t=e[j];}

}

相关文档
最新文档