车务管理模型算法 (二)

2014-11-24 02:46:52 · 作者: · 浏览: 5
j=ord_n(r[p].keys[i]);
if(!f[j]) f[j]=p;
else r[e[j]].next=p;
e[j]=p; //将p所指的结点插入第j个子表中
}
}//Distribute_n

void Collect_n(SLCell* r,int i,ArrType_n f,ArrType_n e)
//本算法按keys[i]自小至大地将f[0..RADIX_n]所指各子表依次链接成一个链表
//e[0..RADIX_n-1]为各子表的尾指针
{
int j,t;
for(j=0;!f[j];j=succ(j)); //找第一个非空子表
r[0].next=f[j];t=e[j]; //r[0].next指向第一个非空子表中的一个结点
while(j {
for(j=succ(j);j if(f[j]) {r[t].next=f[j];t=e[j];} //链接两个非空子表
}
r[t].next=0; //t指向最后一个非空子表中的最后一个结点
}//Collect_n

void Distribute_c(SLCell* r,int i,ArrType_c &f,ArrType_c &e)
//静态链表L的r域中记录已按(keys[0],...keys[i-1])有序
//本算法按第i个关键字keys[i]建立RADIX_c个子表,使同一子表中记录的keys[i]相同
//f[0..RADIX_c]和e[0..RADIX_c]分别指向各自表中的一个和最后一个记录
{
int j,p;
for(j=0;j {
f[j]=0;
e[j]=0;
}
for(p=r[0].next;p;p=r[p].next)
{
j=ord_c(r[p].keys[i]);
if(!f[j]) f[j]=p;
else r[e[j]].next=p;
e[j]=p; //将p所指的结点插入第j个子表中
}
}//Distribute_c

void Collect_c(SLCell* r,int i,ArrType_c f,ArrType_c e)
//本算法按keys[i]自小至大地将f[0..RADIX_c]所指各子表依次链接成一个链表
//e[0..RADIX_c-1]为各子表的尾指针
{
int j,t;
for(j=0;!f[j];j=succ(j)); //找第一个非空子表
r[0].next=f[j];t=e[j]; //r[0].next指向第一个非空子表中的一个结点
while(j {
for(j=succ(j);j if(f[j]) {r[t].next=f[j];t=e[j];} //链接两个非空子表
}
r[t].next=0; //t指向最后一个非空子表中的最后一个结点
}//Collect_c

void RadixSort(SLList &L)
//对作基数排序,使得L成为按关键字自小到大的有序静态链表
{
int i;
ArrType_n fn,en;
ArrType_c fc,ec;
for(i=0;i L.r[L.recnum].next=0; //将改造为静态链表
for(i=L.keynum-1;i>2;i--) //按最低位优先依次对各关键字进行分配和收集
{ //分为三段,因为须将字符的那个关键字单独做
Distribute_n(L.r,i,fn,en);
Collect_n(L.r,i,fn,en);
}
Distribute_c(L.r,2,fc,ec);
Collect_c(L.r,2,fc,ec);
for(i=1;i>=0;i--)
{
Distribute_n(L.r,i,fn,en);
Collect_n(L.r,i,fn,en);
}
}//RadixSort

void Arrange(SLList &L)
//根据静态链表L中各结点的指针值调整记录位置,使得L中记录按关键字非递减
{
int i,p,q;
SLCell buf;
p=L.r[0].next; //p指示第一个记录的当前位置
for(i=1;i { //第i个记录在L中的当前位置应不小于i
while(p q=L.r[p].next; //q指示尚未调整的表尾
if(p!=i)
{
buf=L.r[p];L.r[p]=L.r[i];L.r[i]=buf; //交换记录
L.r[i].next=p; //指向被移走的记录,使得以后可由while循环找回
}
p=q; //p指向尚未调整的表尾,为找第i+1个记录做准备
}
}//Arrange


void SLListTraverse(SLList L)
//遍历静态表
{
int i,j;
cout< cout<<"CARNUM"<<'\t'<<"CARNAME"<<'\t'<<"COLOR"<<'\t'<<"DATA"<<'\t'<<"OWNERNAME"< if(L.recnum)
for(i=1;i<=L.recnum;i++)
{
for(j=0;j cout<<'\t'< cout< }//for
}//SLListTraverse

void DataTraverse(SLList L,int num)
//显示一个记录
{
int j;
cout<<"(Note:other data term is peculiarity character)"< cout<<"CARNUM"<<'\t'<<"CARNAME"<<'\t'<<"COLOR"<<'\t'<<"DATA"<<'\t'<<"OWNERNAME"< for(j=0;j cout<<'\t'< cout< }//DataTraverse

void GetSearchKey(KeysType *key)
//得到需要查找的关键字
{
cout<<"Please input the key you want to search:";
for(int i=0;i>key[i];
i