航班信息查询与检索(基数排序二插文件)

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

/*#include "stdafx.h"*/

#include

#include

#include

#include

#include

using namespace std;

#define maxspace 100

#define keylen 7

#define radix_n 10

#define radix_c 26

typedef char keytype;

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];

int keynum;

int length;

}sllist;

typedef int arrtype_n[radix_n];

typedef int arrtype_c[radix_c];

//,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,

void distribute(slnode *sl,int i,arrtype_n f,arrtype_n e) {

int j,p,k;

for(j=0;j

{

f[j]=e[j]=0;

}

for(k=0,p=sl[0].next;p;p=sl[p].next,k++)

{

j=sl[p].keys[i]%48;

if(!f[j])

f[j]=p;

else

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

e[j]=p;

}

}

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(j

{

for(j=j+1;j

if(f[j])

{

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

t=e[j];

}

}

sl[t].next=0;

}

void distribute_c(slnode *sl,int i,arrtype_c f,arrtype_c e) {

int j,p;

for(j=0;j

{

f[j]=e[j]=0;

}

for(p=sl[0].next;p;p=sl[p].next)

{

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

if(!f[j])

f[j]=p;

else

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

e[j]=p;

}

}

void collect_c(slnode *sl,int i,arrtype_c f,arrtype_c e) {

int j,t;

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

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

t=e[j];

while(j

{

for(j=j+1;j

if(f[j])

{

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

t=e[j];

}

}

sl[t].next=0;

}

void radixsort(sllist &l)//链式

{

int i;

arrtype_n fn,en;

arrtype_c fc,ec;

for(i=0;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);

collect(l.sl,i,fn,en);

}

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

{

distribute_c(l.sl,i,fc,ec);

collect_c(l.sl,i,fc,ec);

}

void arrange(sllist &l) //重新整理

{

int p,q,i;

slnode temp;

p=l.sl[0].next;

for(i=1;i

{

while(p

p=l.sl[p].next;

q=l.sl[p].next;

if(p!=i)

{

temp=l.sl[p];

l.sl[p]=l.sl[i];

l.sl[i]=temp;

l.sl[i].next=p;

}

p=q;

}

}

int binsearch(sllist l,keytype key[])

{

int low,high,mid;

low=1;

high=l.length;

while(low<=high)

{

mid=(low+high)/2;

if(strcmp(key,l.sl[mid].keys)==0)

return mid;

else if(strcmp(key,l.sl[mid].keys)<0)

high=mid-1;

else

low=mid+1;

}

return 0;

}

void seqsearch(sllist l,keytype key[],int i)

相关文档
最新文档