航班信息查询与检索.docx
《航班信息查询与检索.docx》由会员分享,可在线阅读,更多相关《航班信息查询与检索.docx(14页珍藏版)》请在冰豆网上搜索。
![航班信息查询与检索.docx](https://file1.bdocx.com/fileroot1/2022-11/16/c910ae52-0492-4127-a1df-2106c1c14e8c/c910ae52-0492-4127-a1df-2106c1c14e8c1.gif)
航班信息查询与检索
航班信息的查询与检索
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;jf[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;jf[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