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

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

题目描述:顺序表L的元素递增有序排列,设计一个算法在插入元素x后保持该顺序表仍然递增有序排列,插入成功后返回插入元素所在位置,不成功返回-1

算法思想:在递增有序的顺序表中插入元素 x 并保持有序性,步骤如下:

合法性检查:若顺序表已满(length == MAXSIZE)或指针为空,插入失败,返回 -1。

查找插入位置:遍历顺序表,找到第一个大于等于 x 的元素的位置 i;若所有元素均小于 x,则插入到表尾(i = length)。

元素后移:从表尾开始,将位置 i 及之后的元素全部后移一位,腾出插入位置。

插入元素:将 x 存入位置 i,表长加 1,返回插入位置 i。

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

代码实现:

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

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

int InsertOrder(SeqList *L, int x) {
    // 检查表是否已满或指针为空
    if (L == NULL || L->length >= MAXSIZE) {
        return -1;
    }
    
    int i;
    // 找到第一个大于等于x的元素的位置
    for (i = 0; i < L->length; i++) {
        if (L->data[i] >= x) {
            break;
        }
    }
    // 若所有元素均小于x,i此时等于length
    
    // 从后向前移动元素,腾出插入位置
    for (int j = L->length; j > i; j--) {
        L->data[j] = L->data[j - 1];
    }
    
    L->data[i] = x;  // 插入x
    L->length++;     // 表长增加
    return i;        // 返回插入位置
}

相关文章:

  • css/scss(at-rules)基础使用(basic use)
  • LangChain开发(九)基于Rag实现文档问答
  • 啸叫抑制(AFS)从算法仿真到工程源码实现-第四节-数据仿真
  • Day15 -实例 端口扫描工具 WAF识别工具的使用
  • 【MyBatisPlus】MyBatisPlus介绍与使用
  • spring boot + thymeleaf整合完整例子
  • ES6-Symbol
  • CTF题目《高明的黑客》(强网杯 2019)Write up
  • 靶场(十八)---小白心得思路分享---shenzi
  • 数据库三级填空+应用(2)
  • 使用 gone.WrapFunctionProvider 快速接入第三方服务
  • vue数字公式篇 Tinymce结合使用(二)
  • Python图像处理——基于CSRNet的人群密度检测系统(Pytorch框架)
  • 【Spring AI】基于专属知识库的RAG智能问答小程序开发——功能优化:用户鉴权相关工具类代码
  • 基于深度学习的图像识别技术在智能安防中的应用
  • 设计模式代码
  • 【sylar-webserver】5 协程调度模块
  • Django之旅:第六节--mysql数据库操作增删改查(二)
  • 【程序人生】我的holland原书版职业测试分析
  • 鸿蒙Flutter实战:19-Flutter集成高德地图,跳转页面方式
  • 开门红背后的韧性密码:上海八大企业的“反脆弱”与“真功夫”
  • 上海112位全国劳动模范和先进工作者接受表彰,樊振东榜上有名
  • 安阳一村支书微信群骂村民被警方行拘,辩称对方先“污蔑造谣”
  • 修订占比近30%收录25万条目,第三版《英汉大词典》来了
  • 程璧“自由生长”,刘卓辉“被旋律牵着走”
  • 上海质子重离子医院已收治8000例患者,基本覆盖国内常见恶性肿瘤