数据结构每日一题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;
}
相关推荐
东东最爱敲键盘4 分钟前
数据结构: 双向链表
数据结构
云泽8089 小时前
数据结构前篇 - 深入解析数据结构之复杂度
c语言·开发语言·数据结构
逝雪Yuki9 小时前
数据结构与算法——字典(前缀)树的实现
数据结构·c++·字典树·前缀树·左程云
技术思考者9 小时前
Leetcode - 反转字符串
数据结构·算法·leetcode
熬了夜的程序员11 小时前
【华为机试】34. 在排序数组中查找元素的第一个和最后一个位置
数据结构·算法·华为od·华为·面试·golang
草莓熊Lotso12 小时前
【数据结构初阶】--排序(一):直接插入排序,希尔排序
c语言·数据结构·经验分享·其他·排序算法
小徐不徐说12 小时前
C++ 模板与 STL 基础入门:从泛型编程到实战工具集
开发语言·数据结构·c++·qt·面试
Tisfy14 小时前
LeetCode 2411.按位或最大的最小子数组长度:一次倒序遍历
数据结构·算法·leetcode·题解·位运算·遍历
晚云与城15 小时前
【数据结构】-----排序的艺术画卷
数据结构·算法·排序算法
j_xxx404_15 小时前
数据结构:算法复杂度与空间复杂度
c语言·数据结构·算法