顺序表 | 删除顺序表中的某个元素

删除顺序表中的某个元素

实现1:(查找到与value相同的元素,将指针不断右移知道与value不同)

C++代码:

void del_elem(int *sqList,int value,int & length){
    int i,d=0;
    for(i=0;i<length-d;i++){
        while(sqList[i+d]==value){
            d++;
        }
        sqList[i]=sqList[i+d];
    }
    length-=d;
}

注意点:记得使用while语句做判断,不然不能删除连续的value

实现效果:

仿王道伪代码:

 1 void del_x_l(sqList & L,ElemType x){
 2     int i,d=0;
 3     for(i=0;i<sqList.length-d;i++){
 4         while(sqList.data[i+d]==x){
 5             d++;
 6         }
 7         sqList.data[i]=sqList.data[i+d];
 8     }
 9     sqList.length-=d;
10 }

王道P20 T3

实现2:(用辅助下标k记录与value不同的元素)

C++代码:

1 void del_elem(int *sqList,int value,int & length){
2     int i,k=0;
3     for(i=0;i<length;i++){
4         if(sqList[i]!=value){
5             sqList[k++]=sqList[i];
6         }
7     }
8     length=k;
9 }

实现3:(用k记录与value相同的元素数量)

C++代码:

void del_elem(int *sqList,int value,int & length){
    int i,k=0;
    for(i=0;i<length;i++){
        if(sqList[i]==value){
            k++;
        }else{
            sqList[i-k]=sqList[i];
        }
    }
    length-=k;
}

注意点:不能写成 sqList[i]=sqList[i-k];  ,避免逻辑上的错误


原文地址:https://www.cnblogs.com/TQCAI/p/8098344.html