zoukankan      html  css  js  c++  java
  • 数组中某元素的删除

    思路就是从前向后扫描数组,记录有遇到有是待删除元素的记录个数,后面的元素均向前移动这个个数个位置,将待删除元素覆盖,但有一点要注意的是这个并不是真正的移动,与其说移动,倒不如说是覆盖,也就是原来位置上的元素并没有移走,而是依靠后面的元素覆盖,因此,最后需要一个收尾工作
    对于char 数组,则是如下代码,即在向前移动后的最后一个位置加上’’
    对于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]='';
        }
    
    

    如输入 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]=’’
    即完成了收尾工作
    时间复杂度为n
    空间复杂度为1

    不过现在学了线性表之后,对于这种插入和删除(尤其不是在尾部插入和删除的)比较多的建议使用链表进行,将极大提升效率

  • 相关阅读:
    Qt 4.x调试器问题,缺失调试助手。
    Qt 如何判断文件是不是一个目录
    Qt 5.7设置调试器
    Qt 无法解析外部文件2001,2019之类的
    TCP/UDP socket
    Qt 5.7 版本+2013VS环境配置
    骑行、318总结心得啊经验什么的
    蓝牙硬件交互数据传输Demo
    iOS蓝牙开发总结-4
    iOS蓝牙传输数据演示-3
  • 原文地址:https://www.cnblogs.com/gao-hongxiang/p/12342431.html
Copyright © 2011-2022 走看看