若线性表LA与LB中的数据元素是按非递减有序排列的,现在要把这两个线性表合并为一个新的非递减有序排列的线性表LC,那么应该用到什么算法呢?
其实,我们需要两个指针i、j,分别指向LA、LB中的某个元素,然后比较两个指针指的值,进行插入即可,算法如下:
void UnionList(List La, List Lb, List &Lc){
//已知La与Lb是非递减有序排列的
//合并La与Lb形成Lc,Lc也是非递减有序排列的
InitList(Lc);
i=j=1; k=0;
La_len=ListLength(La);
Lb_len=ListLength(Lb);
//取La、Lb的长度
while((i<=La_len)&&(j<=Lb_len)){
//La与Lb均不为空
GetELem(La,i,ai);
GetElem(Lb,j,bj);
//分别取La、Lb的第i、j个元素赋值给ai、bj
if(ai<bj){ListInsert(Lc,++k,ai);++i;}
else{ListInsert(Lc,++k,bj);++j;}
//哪个小,哪个值位于Lc的前部
}
while(i<=La_len){
GetELem(La,i++,ai);
ListInsert(Lc,++k,ai);
}
//若Lb早点结束了,则La后面部分依次罗列到Lc中
while(j<=Lb_len){
GetELem(Lb,j++,bj);
ListInsert(Lc,++k,bj);
}
//若La早点结束了,则Lb后面部分依次罗列到Lc中
}//UnionList
大家应该都知道,相关函数对应的含义,若真不知道,可以先读一下,逻辑推理出相应的含义。