原地逆置
扫描顺序表的前半部分元素,交换前后对应元素的位置
对应位置关系:i = L.length-i-1
void Reverse(SqList &L){
int temp;
for(int i = 0;i<L.length/2;i++){
temp = L.data[i];
L.data[i]=L.data[L.length-i-1];
L.data[L.length-i-1] = temp;
}
}
删除所有值为x的元素,时复O(n),空复O(1)
用k记录不等于x的个数,扫描时将不等于x的元素移动到下标k的位置,并更新k值
void del_x(SqList &L,int x){
int k;//记录不等于x的个数
for(int i=0;i<L.length;i++){
if(L.data[i]!=x){
L.data[k] = L.data[i];
k++;
}
}
L.length = k;
}
将两个有序顺序表合并为一个新的有序顺序表
首先,按顺序不断取下两个顺序表表头较小的结点存入新的顺序表中,然后看哪个表还有剩余,将剩下部分加到新的顺序表后面即可
bool Merge(SqList A,SqList B,SqList &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[i])
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++];
C.length=k;
return true;
}