一、问题描述:
将两个有序顺序表合并为一个新的有序顺序表,并由函数返回结果顺序表。
二、算法思想:
首先,按顺序不断取下两个顺序表表头较小的结点存入新的顺序表中。然后哪个表还有剩余,将剩下的部分加到新的顺序表后面。
三、算法代码:
bool Merge(SeqList A,SeqList B,SeqList &C)
//将有序顺序表A与B合并为一个新的有序顺序表C
{
if(A.length + B.length > C.maxsize)//大于顺序表的最大长度
return false;
int i = 0,j = 0,k = 0;
while(i < A.length && B.length)//循环,两两比较,小者存入结果表
{
if(A.data[i] <= B.data[j])
{
C.data[k++] = A.data[j++];
}
else
{
C.data[k++] = B.data[j++];
}
}//还剩一个没比较完的顺序表
while(i < A.length)
{
C.data[k++] = A.data[i++];
}
while(i < B.length)
{
C.data[k++] = B.data[j++];
}
C.length = k;
return true;
}