数组中某元素的删除

思路就是从前向后扫描数组,记录有遇到有是待删除元素的记录个数,后面的元素均向前移动这个个数个位置,将待删除元素覆盖,但有一点要注意的是这个并不是真正的移动,与其说移动,倒不如说是覆盖,也就是原来位置上的元素并没有移走,而是依靠后面的元素覆盖,因此,最后需要一个收尾工作
对于char 数组,则是如下代码,即在向前移动后的最后一个位置加上’\0’
对于int 或double数组,只要把修改len的值即可

void mydelete(char*a,char ch,int len){//a为数组,ch为待删除元素,len为数组长度
    int i,j=0;
    for(i=0;i<len;i++){
        if(a[i]==ch){
            j++;
        }
        else a[i-j]=a[i];
        }
    a[len-j]='\0';
    }

如输入 i love you
希望删除空格
|0|1|2|3|4|5|6|7|8|9
|i| |l|o|v|e| |y|o|u
遇到 a[1] j=1;
后面四个非空格均向前移一个位置
|0|1|2|3|4|5|6|7|8|9
|i| |l|o|v|e|e| |y|o|u
直到再次遇到a[6]位置的空格,这时j=2
you则再次向前移两个单位
|0|1|2|3|4|5|6|7|8|9
|i| |l|o|v|e||y|o|u|o|u
再令a[8]=’\0’
即完成了收尾工作
时间复杂度为n
空间复杂度为1

猜你喜欢

转载自blog.csdn.net/weixin_43305764/article/details/85220968