C 程序:顺序表中插入数据,保持该表仍然递增有序排列
问题:已知一个顺序表,其中的元素递增有序排列,设计一个算法,插入一个元素x(x为int型)后保持该顺序表仍然递增有序排列(假设插入操作总能成功)。
基本思路:
-
找到插入位置:找到第一个比 x 大的元素的位置 i。
-
元素后移:从最后一个元素向后依次移动,给 x 腾出位置。
-
插入 x 到位置 i。
-
顺序表长度加一。
#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;
}

浙公网安备 33010602011771号