当前位置: 首页 > news >正文

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

题目描述:从有序顺序表中删除所有其值重复的元素,使其中所有元素的值均不同

算法思想:

输入检查:若顺序表为空或指针为空,返回false。

双指针覆盖法:

使用指针k标记保留元素的末尾,初始位置为0。

遍历顺序表(从i=1开始),若当前元素data[i]不等于data[k],则将其保留到k+1位置,并更新k。

更新表长:遍历结束后,表长设为k+1,直接截断后续元素。

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

代码实现:

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

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

bool DeleteDuplicates(SeqList *L) {
    // 检查空指针或空表
    if (L == NULL || L->length == 0) {
        return false;
    }

    int k = 0;  // 保留元素的末尾索引
    for (int i = 1; i < L->length; i++) {
        // 若当前元素与前一个保留元素不同,则保留
        if (L->data[i] != L->data[k]) {
            L->data[++k] = L->data[i];  // 先递增k,再赋值
        }
    }

    L->length = k + 1;  // 新表长为k+1
    return true;
}

http://www.dtcms.com/a/111532.html

相关文章:

  • 大型语言模型的智能本质是什么
  • leetcode数组-二分查找
  • LeetCode题一:求两数之和
  • 密码学基础——DES算法
  • WPF 免费UI 控件HandyControl
  • 大模型-爬虫prompt
  • 字符串拼接
  • Python语料数据清洗方法之一
  • 从代码学习深度学习 - LSTM PyTorch版
  • 【硬件模块】数码管模块
  • 理解OSPF Stub区域和各类LSA特点
  • QEMU学习之路(5)— 从0到1构建Linux系统镜像
  • 【学习篇】fastapi接口定义学习
  • 19.TCP相关实验
  • 哈密尔顿路径(Hamiltonian Path)及相关算法题目
  • 前端快速入门学习3——CSS介绍与选择器
  • 第三季:挪威
  • 阿里Qwen 创建智能体,并实现ubantu系统中调用
  • 对用户登录设计测试用例
  • Transformer由入门到精通(一):基础知识
  • CSS快速上手
  • BUUCTF-web刷题篇(10)
  • 封装自己的api签名sdk
  • 数据结构 -- 图的存储
  • SpringBoot定时任务深度优化指南
  • ubuntu部署ollama+deepseek+open-webui
  • OpenCV 实现对形似宝马标的黄黑四象限标定位
  • 字符串移位包含问题
  • CExercise_1_4continue关键字在while循环和for循环中,实现的功能有什么区别?
  • Neo4j操作数据库(Cypher语法)