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

数据结构常考基础代码题-顺序表有序插入

顺序表递增有序,插入元素 x,仍递增有序

第一步:定义顺序表结构体

根据题目中的“顺序表递增有序”,我们需要定义一个顺序表结构体,用于存储元素和顺序表的相关信息。

typedef struct {
    int *data; // 动态数组存储元素
    int length; // 顺序表当前长度
    int size; // 顺序表的最大容量
} Sqlist;

第二步:实现查找插入位置的函数

根据题目中的“插入元素 x”,我们需要实现一个函数 find,用于在列表里一直往前找到第一个不小于 x 的数的索引。

int find(Sqlist L, int x) {
    int i = 0;
    for (; i < L.length; i++) {
        if (x <= L.data[i]) {
            break;
        }
    }
    return i; // 返回找到的位置
}

第三步:实现插入元素的函数

根据题目中的“插入元素 x,仍递增有序”,我们需要实现一个函数 insert,用于将元素 x 插入到顺序表中,并保持顺序表的递增有序性。

void insert(Sqlist *L, int x) {
    int p = find(*L, x); // 找到插入位置
    // 如果顺序表已满,需要扩容
    if (L->length == L->size) {
        L->size = L->size * 2 + 1; // 扩容策略
        int *newData = (int *)realloc(L->data, L->size * sizeof(int));
        if (!newData) {
            exit(-1); // 内存分配失败,退出程序
        }
        L->data = newData;
    }
    // 将p位置及之后的元素向后移动
    for (int j = L->length; j > p; j--) {
        L->data[j] = L->data[j - 1];
    }
    // 插入元素x
    L->data[p] = x;
    L->length++; // 更新顺序表长度
}

第四步:在 main 函数中测试插入操作

最后,我们需要在 main 函数中创建顺序表并测试插入操作,以确保代码的正确性。

int main() {
    Sqlist L;
    L.size = 10; // 初始化最大容量
    L.length = 0;
    L.data = (int *)malloc(L.size * sizeof(int));
    if (!L.data) {
        exit(-1); // 内存分配失败,退出程序
    }

    // 插入元素
    insert(&L, 5);
    insert(&L, 3);
    insert(&L, 8);

    // 打印顺序表
    for (int i = 0; i < L.length; i++) {
        printf("%d ", L.data[i]);
    }
    printf("\n");

    // 释放内存
    free(L.data);
    return 0;
}

http://www.kler.cn/a/350430.html

相关文章:

  • 和优秀的人一起共事,你会越来越优秀!
  • 基于微信小程序的安心陪诊管理系统
  • Java基础——概念和常识(语言特点、JVM、JDK、JRE、AOT/JIT等介绍)
  • PHP企业IM客服系统
  • [STM32 HAL库]串口空闲中断+DMA接收不定长数据
  • Output
  • JAVA基础(6)
  • 【开源风云】从若依系列脚手架汲取编程之道(五)
  • 单片机死机后在不破坏现场的情况下连接调试器进入调试模式
  • Java筑基之路:运算符深入(下)
  • screenpipe – 搭建个性化AI助手的软件,捕捉屏幕和音频录音
  • 常见的Webshell查杀工具-应急响应实战笔记
  • 搜维尔科技:感受、握持、推动、连接和挤压虚拟物体,SenseGlove触觉反馈手套拥有先进的触觉技术、一流的可用性和功能
  • Jenkins实践(三):分包编译部署到Maven私仓
  • 如何选择安全的谷歌浏览器插件
  • Djang学习- URL反转
  • 浙大数据结构全题解汇总(C++实现)
  • 【Flutter】基础入门:开发环境搭建
  • 企业级私有化即时通讯软件:高效沟通与安全保障的优选
  • Bellman-Ford
  • 平稳随机信号的频域表达
  • 3DCAT实时云渲染赋能2024广东旅博会智慧文旅元宇宙体验馆上线!
  • FreeRTOS应用开发学习
  • qt 10.10作业
  • STM32—SPI通讯协议
  • Windows环境下Qt Creator调试模式下qDebug输出中文乱码问题