C 程序:顺序表中插入数据,保持该表仍然递增有序排列

问题:已知一个顺序表,其中的元素递增有序排列,设计一个算法,插入一个元素x(x为int型)后保持该顺序表仍然递增有序排列(假设插入操作总能成功)。

基本思路:

  1. 找到插入位置:找到第一个比 x 大的元素的位置 i。

  2. 元素后移:从最后一个元素向后依次移动,给 x 腾出位置。

  3. 插入 x 到位置 i。

  4. 顺序表长度加一。

#include <stdio.h>
#include <stdbool.h>

#define MAXSIZE 100
//定义顺序表结构体
typedef struct {
    int data[MAXSIZE]; // 顺序表数组
    int length;        // 当前有效长度
} SeqList;

void InsertSorted(SeqList *list, int x) {
    int i = 0;

    // 1. 找到第一个比x大的位置
    while (i < list->length && list->data[i] < x) {
        i++;
    }

    // 2. 从后向前移动元素,为x腾位置
    for (int j = list->length; j > i; j--) {
        list->data[j] = list->data[j - 1];
    }

    // 3. 插入x
    list->data[i] = x;

    // 4. 顺序表长度+1
    list->length++;
}

int main() {
    SeqList list = {{1, 3, 5, 7, 9}, 5};
    int x = 6;

    InsertSorted(&list, x);

    // 输出结果:1 3 5 6 7 9
    for (int i = 0; i < list.length; i++) {
        printf("%d ", list.data[i]);
    }

    return 0;
}


posted @ 2025-07-18 09:11  Aino_D  阅读(36)  评论(0)    收藏  举报