考研数据结构(每日一题)
题目:将两个有序顺序表合并为一个新的有序顺序表,并由函数返回结果顺序表。
算法图解:
算法思想:
从AB开始,首先将A的第一个元素和B的第一个元素比较,将较小的元素取出来放入C中,然后依次比较存入C,若AB中其中一个顺序表读完了,则将剩下的元素依次存入C
完整代码:
bool Merge(Sqlist A,Sqlist B,Sqlist &C){
//比较
if(A.length+B.length>C.Maxsize){
return false;
}
int i = 0,j = 0, k = 0; //数组从0开始
//循环条件
while(i<A.length && j<B.length){
if(A.data[i] < B.data[j]){ //若A中的元素小于B中的元素
C.data[k] = A.data[i]; //存入C中
i++;k++; //i和k依次向后移一位
}else{
C.data[k] = B.data[j]; //若B中的元素更小,将B中的元素存入C
j++;k++;
}
}
//AB其中一个顺序表中的元素读完后,剩余元素的处理
while(i<A.length) { //若A中有剩余
C.data[k] = A.data[i];
k++;i++;
}
while(j<B.length){ //若B中有剩余
C.data[k] = B.data[j];
k++;j++;
C.length = k;
}
return true; //返回
}