这是本人在网上下载的。。给大家分享
#include
#include
#include
#define MaxSpace 100
#define keylen 6
#define RADIX_n 10
#define RADIX_c 26
typedef char KeyType;
typedef struct{
char start[8]; //起点
char end[8]; //终点
char sche[8]; //班期
char time1[6]; //起飞时间
char time2[6]; //到达时间
char model[6]; //机型
int price; //票价
}InfoType; //航班记录类型
typedef struct{
KeyType keys[keylen]; //关键字
InfoType others;
int next;
}SLNode; //表节点
typedef struct{
SLNode s1[MaxSpace]; //静态链表,是s1[0]为头结点
int keynum; //关键字长
int length; //当前表长
}SLList; //静态联表类型
typedef int ArrType_n[RADIX_n];
typedef int ArrType_c[RADIX_c];
int m=0,num=0;
/*本算法时按关键字keys[i]建立radix个子表,使同一个子表中记录的keys[i]相同,f[0…radix]
和e[0..radix]分别指向各子表,使同一个子表中的第一个和最后一个记录*/
void Distribute(SLNode *s1,int i,ArrType_n f,ArrType_n 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; /*将p指向的结点插入到第j个结点*/
}
}
/*本算法是按关键字keys[i]从小到大将[0…radix]所指的各子表依次链接成一个链表*/
void Collect(SLNode *s1,ArrType_n f,ArrType_n e)
{
int j,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
if(f[j]) /*连接两个非空字表*/
{
s1[t].next=f[j];
t=e[j];
}
}
s1[t].next=0; /*t指向最后一个非空子表*/
}
void Distribute_c(SLNode *s1,int i,ArrType_c f,ArrType_c e)
{
int j,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;
else s1[e[j]].next=p;
e[j]=p;
}
}
void Collect_c(SLNode *s1,ArrType_c f,ArrType_c 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];
}
}
s1[t].next=0;
}
/*本算法是按关键字从低位到高位依次对个关键字进行分配和收集,分两