删除数组中值为k的所有元素

删除数组中值为k的所有元素

算法设计思路:
需要查找数组中所有的元素,所以我们从空间复杂度评价算法的优劣:
设置相同元素的个数计数变量,num即相同元素出现的次数,初始值为0,因为数组是顺序表,每个元素需要连接起来,所以相同的元素的出现次数即所有元素的移动次数。
设相同的元素为k,则开始比较,若出现与k相同的元素,num++,继续遍历出现的元素和k不同,将该元素向前移动num位。直到遍历结束。最后将原数组从num位到数组最后一位置为NULL。结束。
实现:

void DeleteSqList(SqList &L, int ElemType k){
    int num = 0;
    for(int i = 0; i < L.length; i++){
        if(L.data[i] == k)num++;//如果相等,后续元素移动的位置增加1
        else L.data[i-num] = L.data[i];//不相等则将该元素向前移动num个位置
    }
    for(int i = num; i < L.length; i++){
        L.data[i] = NULL;//移动后的位置置为空
    }
}

通常将顺序表理解为数组,算法是针对顺序表做的,数组同理,较为简单。算法的空间复杂度为O(1),时间复杂度为O(n)。
顺序表结构体:

#define MAX 20
typedef struct{
    ElemType data[MAX];
    int length;
}SqList;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值