航班信息查询与检索.docx

上传人:b****6 文档编号:3002819 上传时间:2022-11-17 格式:DOCX 页数:14 大小:29.26KB
下载 相关 举报
航班信息查询与检索.docx_第1页
第1页 / 共14页
航班信息查询与检索.docx_第2页
第2页 / 共14页
航班信息查询与检索.docx_第3页
第3页 / 共14页
航班信息查询与检索.docx_第4页
第4页 / 共14页
航班信息查询与检索.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

航班信息查询与检索.docx

《航班信息查询与检索.docx》由会员分享,可在线阅读,更多相关《航班信息查询与检索.docx(14页珍藏版)》请在冰豆网上搜索。

航班信息查询与检索.docx

航班信息查询与检索

航班信息的查询与检索

f94

#include#include#include#defineMaxSpace100#definekeylen6#defineRADIX_n10#defineRADIX_c26typedefcharKeyType;typedefstruct{charstart[8];

//

起点

charend[8];

//

终点

—、八、、

charsche[8];

//

班期

chartime1[6];

//

起飞时间

chartime2[6];

//

到达时间

charmodel[6];

//

机型

intprice;

//

票价

}InfoType;//

航班记录类型

typedefstruct{

KeyTypekeys[keylen];

//

关键字

InfoTypeothers;intnext;}SLNode;

//

表节点

typedefstruct{

SLNodes1[MaxSpace];

//

静态链表,是s1[0]为头结点

intkeynum;

//

关键字长

intlength;

//

当前表长

}SLList;

//

静态联表类型

typedefintArrType_n[RADIX_n];

typedefintArrType_c[RADIX_c];intm=0,num=0;

/*本算法时按关键字keys[i]建立radix个子表,使同一个子表中记录的keys[i]相同,f[0…radix]

和e[0..radix]分别指向各子表,使同一个子表中的第一个和最后一个记录*/

voidDistribute(SLNode*s1,inti,ArrType_nf,ArrType_ne)

{

intj,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;

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

e[j]=p;

到第j个结点*/

/*

将p指向的结点插入

}

}

/*本算法是按关键字keys[i]从小到大将[0…radix]所指的各子表依次链接成一个链表*/

voidCollect(SLNode*s1,ArrType_nf,ArrType_ne)

{

intj,t;for(j=0;!

f[j];j++);/*子表*/

s1[0].next=f[j];/*sl[0].next第一个非空子表中的一个结点*/t=e[j];

while(j

{

for(j=j+1;j

f[j];j++);/*if(f[j])/*

{

s1[t].next=f[j];

t=e[j];

}

找到第一个非空

指向

找下一个非空子表*/连接两个非空字表*/

指向最后一个非

}s1[t].next=0;/*t空子表*/voidDistribute_c(SLNode*s1,inti,ArrType_cf,ArrType_ce){

intj,p;

for(j=0;j

{

f[j]=0;

e[j]=0;

}for(p=s1[0].next;p!

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

{

j=s1[p].keys[i]%65;

if(!

f[j])f[j]=p;

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

e[j]=p;

}

}

voidCollect_c(SLNode*s1,ArrType_cf,ArrType_ce)

{

intj,t;

for(j=0;!

f[j];j++);

s1[0].next=f[j];

t=e[j];

while(j

{

for(j=j+1;j

f[j];j++);

if(f[j])

{

s1[t].next=f[j];

t=e[j];

}

}

s1[t].next=0;

}

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

其中RadixSort方法通过调用前面的分配函数和收集函数来从最后一个关键字开始进行整理。

*/voidRadixSort(SLList*L){

inti;

ArrType_nfn,en;

ArrType_cfc,ec;for(i=0;ilength;i++)

L->s1[i].next=i+1;

L->s1[L->length].next=0;/*表*/

for(i=L->keynum-1;i>=2;i--)/*

对各关键字进行分配和收集*/

{

Distribute(L->s1,i,fn,en);

Collect(L->s1,fn,en);

}

for(i=1;i>=0;i--)

{

Distribute_c(L->s1,i,fc,ec);

Collect_c(L->s1,fc,ec);

}

}

voidArrange(SLList*L)

{

intp,q,i;

SLNodetemp;

p=L->s1[0].next;/*p当前位置*/

for(i=1;ilength;i++)

{

将改造为静态链

按最低位优先依次

指示第一个记录的

找到第i个记

while(ps1[p].next;

q=L->s1[p].next;

/*q

指示尚未调整的表

尾*/

if(p!

=i)

{

temp=L->s1[p];

L->s1[p]=L->s1[i];

L->s1[i]=temp;

L->s1[i].next=p;

*/

}

/*

指向被移走的记录

p=q;/整的表尾,为下一个准备*/

*p

指向尚未调

}

}

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

intBinSearch(SLList*L,KeyTypekey[])

{

intlow,high,mid;

low=1;

high=L

fc1

->length-1;

while(low<=high)

{mid=(low+high)/2;

if(strcmp(key,L->s1[mid].keys)==0)returnmid;

elseif(strcmp(key,L->s1[mid].keys)<0)high=mid-1;elselow=mid+1;

}

return0;

}

voidDisplay(SLList*L,inti)

{

到达

printf("航班号起点站终点站航班期起飞时间时间机型票价\n");

printf("%6s,%6s,%8s,%10s,%8s,%8s,%8s,%6d\n",L->s1[i].keys,L

->s1[i].others.start,L->s1[i].others.end,L->s1[i].others.sc

he,L->s1[i].others.time1,L->s1[i].others.time2,L->s1[i].others.model,L->s1[i].others.price);

}

voidSeqSearch(SLList*L,KeyTypekey[],inti)

{

intj,k,m=0;

for(j=1;jlength;j++)

{

switch(i)

{

case2:

k=strcmp(key,L->s1[j].others.start);

break;

case3:

k=strcmp(key,L->s1[j].others.end);

break;

case4:

k=strcmp(key,L->s1[j].others.time1);

break;

case5:

k=strcmp(key,L->s1[j].others.time2);

break;

if(k==0)

{

m=1;

Display(L,j);

}

}

!

\n");

if(m==0)printf("无此航班信息,可能是输入错误}voiddelete(SLList*L,KeyTypekey[])

{

intj,k=0;

for(j=1;jlength;j++)if(strcmp(key,L->s1[j].keys)==0)

{

k=j;

break;

}

if(k==0)printf("对不起,没有这个航班!

\n");else

{

if(k==L->length-1)

{

L->length--;

}

else

{for(j=k;jlength-1;j++)

{

L->s1[j]=L->s1[j+1];

L->length--;

}

}

}

/*对于此算法主要是注意信息长度的赋值,对于每次调用要作相应的改变。

*/

voidInputData(SLList*L)

{

inti,j,n;

charkn;

charyn='y';

num++;

if(num==1)

{

i=++L->length;

}

else

{

i=L->length;

}

while(yn=='y'||yn=='Y')

{

m++;

n=0;

printf("航班号起点站终点站航班期起飞时间到达时间机型票价\n");

scanf("%s%s%s%s%s%s%s%d",L->s1[i].keys,L->s1[i].others.start,L->s1[i].others.end,L->s1[i].others.sche,L->s1[i].

others.time1,L->s1[i].others.time2,L->s1[i].others.model,&L

->s1[i].others.price);

scanf("%c",&kn);

if(m!

=1)

{

for(j=1;j

{

if(strcmp(L->s1[i].keys,L->s1[j].keys)==0)

{

printf("sorry,你输入的航班已经存在!

\n");

n=1;

break;

}

}

}

if(n==0)i++;

printf("继续输入吗?

y/n:

");

scanf("%c",&yn);

}

L->length=i;

if(n==0)

{

RadixSort(L);

Arrange(L);

}

}

voidserachcon(SLList*L,intn){

inti=1;

while(i!

=0)

{

charkey[keylen];

char

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 幼儿教育 > 幼儿读物

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

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