算法1:将删除某个值为x的元素转化为保留所有值不等于x的元素
算法最为简单
void del_1(Sqlist &L, int x){
int k=0;
for(int i=0; i<L.length; i++){
if(L.data[i] != x){
L.data[k] = L.data[i];
k++;
}
}
L.length = k;
}
算法2:删除值为x的元素,通过设置一个flag,来记录值为x的元素个数,从而控制非x值存储的位置。
void del_2(Sqlist &L, int x){
int k=0;
for(int i=0; i<L.length; i++){
if(L.data[i] == x){
++k;
}
else{
L.data[i-k] = L.data[i];
}
}
L.length = L.length - k;
}
算法3:如果检测出值等于x的元素,则将其后续所有元素向前移动一位,表长length-1
思想比较明白易懂,但时间复杂度较高。
void del_3(Sqlist &L, int x){
for(int i=0; i<L.length; i++){
if(L.data[i] == x){
for(int j=i; j<L.length; j++){
L.data[j] = L.data[j+1];
}
L.length--;
}
}
}