题目:将两个有序顺序表合并为一个新的有序顺序表,并由函数返回结果顺序表
关键字:有序顺序表 合并
思路
关注: 已知有序顺序表A,B,将AB中元素进行处理后放入新表C
1.按顺序遍历,不断取下两个顺序表表头较小的结点存入新顺序表中,被取走元素后自动遍历,再次比较
需要变量:遍历小助手i(A),j(B),k(C)
2.如何结束?
当一表循环收入结束时,(分别对两表都进行以下操作)
a.另一表没结束,则只需循环收入剩余所有元素(必然都是最大的了)
b.另一表也结束了,则结束程序
需要变量: length作为边界
#特殊情况:
1.创建新表来装入AB两表,但是C表内存不够,gg
bool Merge(SqList A,Sqlist B,Sqlist &C){
//将有序顺序表A和B合并为一个新的顺序表C
if (A.length+B.length>C.MaxSize)//大于顺序表的最大长度
return false;
int i=0,j=0,k=0;
while(i<A.length&&j<B.length){//循环,两两比较,小者存入结果表C
if (A.data[i]<=B.data[i])
c.data[k++]=A.data[i++];
else
C.data[k++]=B.data[j++];
}
while(i<A.length)//当A表还有剩余元素没有收入
c.data[k++]=A.data[i++];
while(j<B.length)//当B表还有剩余元素没有收入
c.data[k++]=B.data[j++];
c.length=k;
return true;
}