1、有两个顺序表LA,LB,其元素均为非递减有序排列,编写算法将它们合并成一个顺序表LC,要求LC也是非递减有序排列。 例如:LA={2,2,3} LB={1,3,3,4} 则LC={1,2,2,3,3,3,4}
部分函数的调用请参考:https://blog.csdn.net/qq_50504109/article/details/120273546
#include<stdio.h>
#include "InstanceLinearList.c" //相当于java中的导包,利用我自己写好的文件
/**
* 有两个顺序表LA,LB,其元素均为非递减有序排列,编写算法将它们合并成一个顺序表LC,要求LC也是非递减有序排列。
* 例如:LA={2,2,3} LB={1,3,3,4} 则LC={1,2,2,3,3,3,4}
* @return
*/
int main(){
void mergeList(LinearList *listA,LinearList *listB,LinearList *listC);
LinearList *listA = creatLinearList();
LinearList *listB = creatLinearList();
LinearList *listC = creatLinearList();
insert(listA,2,1);
insert(listA,2,2);
insert(listA,3,3);
insert(listB,1,1);
insert(listB,3,2);
insert(listB,3,3);
insert(listB,4,4);
mergeList(listA,listB,listC);
dispaly(listC);
}
void mergeList(LinearList *listA,LinearList *listB,LinearList *listC){
int i = 0,j = 0,k = 0;
while((i <= listA->last) && (j <= listB->last)){
if (listA->elem[i] <= listB->elem[j]){
listC->elem[k] = listA->elem[i];
k++;
i++;
}else{
listC->elem[k] = listB->elem[j];
k++;
j++;
}
}
while(i <= listA->last){ //当表A有剩余时,将表A剩下的赋值给表C
listC->elem[k] = listA->elem[i];
k++;
i++;
}
while(j <= listB->last){//当表B有剩余时,将表B剩下的赋值给表C
listC->elem[k] = listB->elem[j];
k++;
j++;
}
listC->last = listA->last+listB->last+1;//这个地方要加1哦,因为你用的下标,而且对应的还是数组
}