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

题目描述:从顺序表L中删除最小值元素并由函数返回被删元素的值。(假设顺序表L有最小值且最小值唯一)

算法思想:

合法性检查:若顺序表为空或指针为空,返回特定错误值(如-1,根据题目假设可省略)。

查找最小值位置:遍历顺序表,记录当前最小值及其下标。

保存并删除元素:将最小值元素保存后,将其后所有元素前移一位覆盖该位置。

更新表长:顺序表长度减1,返回被删元素值。

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

代码实现:

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

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

int DeleteMin(SeqList *L) {
    // 检查空指针或空表(题目假设存在最小值,此检查可省略)
    if (L == NULL || L->length == 0) {
        return -1;  // 返回错误标记
    }

    int min_index = 0;              // 初始假设第0个元素最小
    int min_value = L->data[0];     // 保存当前最小值

    // 遍历查找最小值位置
    for (int i = 1; i < L->length; i++) {
        if (L->data[i] < min_value) {
            min_value = L->data[i];
            min_index = i;
        }
    }

    // 将最小值后的元素前移,覆盖删除位置
    for (int i = min_index + 1; i < L->length; i++) {
        L->data[i - 1] = L->data[i];
    }

    L->length--;    // 表长减1
    return min_value; // 返回被删除的最小值
}

int main() {
    // 示例测试
    SeqList L = {{5, 3, 2, 8, 1}, 5};
    int min = DeleteMin(&L);
    printf("被删除的最小值:%d\n", min);        // 输出:1
    printf("删除后的顺序表:");
    for (int i = 0; i < L.length; i++) {
        printf("%d ", L.data[i]);           // 输出:5 3 2 8
    }
    return 0;
}
相关推荐
飞机和胖和黄28 分钟前
考研之王道C语言第三周
c语言·数据结构·考研
yyy(十一月限定版)29 分钟前
寒假集训4——二分排序
算法
星火开发设计29 分钟前
类型别名 typedef:让复杂类型更简洁
开发语言·c++·学习·算法·函数·知识
醉颜凉40 分钟前
【LeetCode】打家劫舍III
c语言·算法·leetcode·树 深度优先搜索·动态规划 二叉树
达文汐43 分钟前
【困难】力扣算法题解析LeetCode332:重新安排行程
java·数据结构·经验分享·算法·leetcode·力扣
一匹电信狗43 分钟前
【LeetCode_21】合并两个有序链表
c语言·开发语言·数据结构·c++·算法·leetcode·stl
User_芊芊君子43 分钟前
【LeetCode经典题解】搞定二叉树最近公共祖先:递归法+栈存路径法,附代码实现
算法·leetcode·职场和发展
算法_小学生1 小时前
LeetCode 热题 100(分享最简单易懂的Python代码!)
python·算法·leetcode
执着2591 小时前
力扣hot100 - 234、回文链表
算法·leetcode·链表
Gorgous—l1 小时前
数据结构算法学习:LeetCode热题100-多维动态规划篇(不同路径、最小路径和、最长回文子串、最长公共子序列、编辑距离)
数据结构·学习·算法