//时间复杂度为O(n^2),空间复杂度为O(1)
void SqListDelete(SqList &L,ElemType 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--;
}
}
}
//时间复杂度为O(n),空间复杂度为O(1)
void Del_x_SqList(SqList &L,ElemType x)
{
int k=0;
for(int i=0; i<L.length; i++){ //遍历顺序表
if(L.data[i]!=x){ //判断,不相同的时候将值保存,若相同,则i继续后移比较
L.data[k]=L.data[i]; //保存值
k++; //保存一个值,就往后移一位
}
}
L.length = k; //k为保存的顺序表长度
}
时间复杂度为O(n),空间复杂度为O(1)k为删除元素个数,同时也代表非x元素需要向前移动几个位置填入“空位”(逻辑上为垃圾值)
void Del_x_2_SqList(SqList &L,ElemType x)
{
int k=0;
for (int i=0;i<L.length;i++)
{
if(L.data[i]==x) //如果是需要删除的元素,就K++,表示有几个“空位”
k++;
else
L.data[i-k]=L.data[i]; //将非x元素填入空位,若没有空位,则L.data[i]=L.data[i],不改变线性表。
}
L.length=L.length-k; //删除了K个元素
}