车务管理模型算法实现如下
[cpp]
#include "common.h"
/**********************************各种常量及类型定义***********************************/
#define MAX_NUM_OF_KEY 7 //最大关键字数
#define RADIX_n 10 //十进制整数的基数
#define RADIX_c 26 //26个字母的基数
#define MAX_SPACE 2000 //最大链表空间
#define LT(a,b) ((a)<(b))
#define EQ(a,b) ((a)==(b))
#define BG(a,b) ((a)>(b))
typedef char KeysType; //关键字类型
typedef struct{
char carname[15]; //车名
char color[10]; //颜色
char date[10]; //购买日期
char ownername[15]; //车主
}InfoType;
typedef struct{
KeysType keys[MAX_NUM_OF_KEY]; //关键字
InfoType otheritems; //其他数据项
int next;
}SLCell;
typedef struct{
SLCell r[MAX_SPACE]; //静态链表的可利用空间,r[0]为头结点
int keynum; //记录的当前关键字个数
int recnum; //静态链表的当前长度
}SLList; //静态链表类型
typedef int ArrType_n[RADIX_n]; //十进制指针数组类型
typedef int ArrType_c[RADIX_c]; //26个字母的指针数组类型
/**********************************各种函数定义*****************************************/
void InitSLList(SLList &L)
//链表初始化
{
L.recnum=0;
L.keynum=MAX_NUM_OF_KEY;
}//InitSLList
void GetData(SLList &L)
//获得数据
{
KeysType key='0';
int j=1;
cout<<"please input the car number with key='#' to end"<
for(int i=0;i
cin>>key;
if(i==2&&key>'Z') key=(char)(key-'a'+'A');
L.r[1].keys[i]=key;
}
printf("carname:");
gets(L.r[1].otheritems.carname);
printf("color:");
gets(L.r[1].otheritems.color);
printf("date:");
gets(L.r[1].otheritems.date);
printf("ownername:");
gets(L.r[1].otheritems.ownername);
while(key!='#')
{
j++;
cout<
printf("color:");
gets(L.r[j].otheritems.color);
printf("date:");
gets(L.r[j].otheritems.date);
printf("ownername:");
gets(L.r[j].otheritems.ownername);
}//while
L.recnum=j;
}//GetData
int ord_n(KeysType key)
//将记录中第key个关键字映射到[0..RADIX_n]
{
return ((int)(key-'0'));
}//ord_n
int ord_c(KeysType key)
//将记录中第key个关键字映射到[0..RADIX_c]
{
return ((int)((int)key-'A'));
}//ord_c
int succ(int j)
//求j的后继函数
{
return (j+1);
}//succ
void Distribute_n(SLCell* r,int i,ArrType_n &f,ArrType_n &e)
//静态链表L的r域中记录已按(keys[0],...keys[i-1])有序
//本算法按第i个关键字keys[i]建立RADIX_n个子表,使同一子表中记录的keys[i]相同
//f[0..RADIX_n]和e[0..RADIX_n]分别指向各自表中的一个和最后一个记录
{
int j,p;
for(j=0;j
f[j]=0;
e[j]=0;
}
for(p=r[0].next;p;p=r[p].next)
{