航班信息查询与检索(基数排序二插文件)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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)