数据结构每日一题day6(顺序表)★★★★★

题目描述:对长度为n的顺序表L,删除顺序表中所有值为x的数据元素。

算法思想:

双指针覆盖法:使用两个指针(逻辑上的索引),一个遍历原数组(i),另一个记录保留元素的位置(k)。

筛选保留元素:遍历时,若当前元素不等于x,将其复制到k位置,并递增k。

更新表长:遍历结束后,将顺序表长度设为k,实现原地删除所有x元素。

复杂度分析:时间复杂度O(n)空间复杂度O(1)

代码实现:

cpp 复制代码
#include <stdbool.h>
#define MAXSIZE 100  // 假设顺序表最大容量

typedef struct {
    int data[MAXSIZE];
    int length;
} SeqList;

bool DeleteAllX(SeqList *L, int x) {
    // 检查空指针
    if (L == NULL) {
        return false;
    }
    int k = 0;  // 记录保留元素的位置
    for (int i = 0; i < L->length; i++) {
        // 若当前元素不等于x,保留到位置k
        if (L->data[i] != x) {
            L->data[k++] = L->data[i];
        }
    }
    L->length = k;  // 更新表长为保留元素的数量
    return true;
}
相关推荐
FMRbpm1 小时前
链表5--------删除
数据结构·c++·算法·链表·新手入门
努力学习的小全全3 小时前
【CCF-CSP】05-01数列分段
数据结构·算法·ccf-csp
遗憾是什么.4 小时前
数据结构 -- 栈
数据结构·算法·链表
liuhuapeng03044 小时前
GetMapping自动截取List<String>字符
数据结构·windows·list
仰泳的熊猫4 小时前
1013 Battle Over Cities
数据结构·c++·算法·pat考试
AI科技星6 小时前
宇宙膨胀速度的光速极限:基于张祥前统一场论的第一性原理推导与观测验证
数据结构·人工智能·经验分享·python·算法·计算机视觉
liu****7 小时前
16.udp_socket(三)
linux·开发语言·数据结构·c++·1024程序员节
Rock_yzh8 小时前
LeetCode算法刷题——49. 字母异位词分组
数据结构·c++·学习·算法·leetcode·职场和发展·哈希算法
小欣加油8 小时前
leetcode 2654 使数组所有元素变成1的最少操作次数
数据结构·c++·算法·leetcode·职场和发展
码银18 小时前
【数据结构】顺序表
java·开发语言·数据结构