题目要求:将两个有序顺序表合并为一个新的有序顺序表,并由函数返回结果顺序表。
分析:
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&&j<B.length) {
//循环,两两比较,小者存入结果表
if (A.data[i]<=B.data[j])
C.data[k++]=A.data[i++] ;
else
C.data[k++]=B.data[j++] ;
}
//还剩一个顺序表没有比较完
while (i<A.length)
C.data[k++]=A.data[i++];
while (j<B.length)
C.data[k++]=B.data[j++];//要么是A要么是B
//更新表长
C.length=k;
return true;
}
题目要求:对于长度为n的顺序表L,编写一个时间复杂度为O(n),空间复杂度为O(1)的算法,该算法删除线性表中所有值为X的顺序表
分析:
void del_ x (Sqlist &L, Elemtype x) {
int k=0, i=0; //k记录值等于x的元素个数
while (i<L.length) {
if (L.data[i]==x)
k++;
else
L.data[i-k]=L.data[i]; //当前元素前移 K个位置
i++;
}
L. length=L. length-k; //顺序表L的长度递减
}