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

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

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

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

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

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

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

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

代码实现:

cpp 复制代码
#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;        // 返回插入位置
}
相关推荐
艾莉丝努力练剑7 分钟前
【Linux指令 (二)】不止于入门:探索Linux系统核心与指令的深层逻辑,理解Linux系统理论核心概念与基础指令
linux·服务器·数据结构·c++·centos
C嘎嘎嵌入式开发38 分钟前
(10)100天python从入门到拿捏《Python中的数据结构与自定义数据结构》
数据结构·python·算法
Vect__1 小时前
从底层到上层的“外挂”:deque、stack、queue、priority_queue 全面拆解
数据结构·c++
玖釉-2 小时前
三维模型数据结构与存储方式解析
数据结构·算法·图形渲染
努力努力再努力wz2 小时前
【C++进阶系列】:万字详解特殊类以及设计模式
java·linux·运维·开发语言·数据结构·c++·设计模式
青岛少儿编程-王老师12 小时前
CCF编程能力等级认证GESP—C++7级—20250927
数据结构·c++·算法
nanaki5021314 小时前
数据结构(3) ----------- 栈、队列
数据结构
一只小透明啊啊啊啊14 小时前
b树,b+树,红黑树
数据结构·b树·b+树
Mingze031415 小时前
C语言四大排序算法实战
c语言·数据结构·学习·算法·排序算法
程序员东岸15 小时前
学完顺序表后,用 C 语言写了一个通讯录
数据结构·笔记·学习