c语言动态非递减有序顺序表输入元素,插入元素,仍递增
时间: 2023-05-30 20:05:36 浏览: 149
已知单链表L为按值递增有序的,编写算法将数据元素e插入到顺序表L中,使之仍有序
5星 · 资源好评率100%
以下是动态非递减有序顺序表的C语言实现,包括输入元素和插入元素操作:
```
#include <stdio.h>
#include <stdlib.h>
#define MAX_SIZE 100 // 最大容量
typedef struct {
int *data; // 数据指针
int length; // 当前长度
int capacity; // 最大容量
} SeqList;
// 初始化顺序表
void InitList(SeqList *L) {
L->data = (int*)malloc(MAX_SIZE * sizeof(int));
L->length = 0;
L->capacity = MAX_SIZE;
}
// 插入元素
int Insert(SeqList *L, int x) {
// 如果顺序表已满,无法插入
if (L->length == L->capacity) {
printf("顺序表已满,无法插入元素。\n");
return 0;
}
// 如果顺序表为空,直接插入元素
if (L->length == 0) {
L->data[0] = x;
L->length++;
return 1;
}
// 在有序顺序表中查找插入位置
int i;
for (i = L->length - 1; i >= 0; i--) {
if (L->data[i] <= x) {
break;
}
}
// 插入元素
int j;
for (j = L->length - 1; j > i; j--) {
L->data[j + 1] = L->data[j];
}
L->data[i + 1] = x;
L->length++;
return 1;
}
// 输入元素
void Input(SeqList *L) {
int x;
printf("请输入元素(输入-1结束):\n");
while (1) {
scanf("%d", &x);
if (x == -1) {
break;
}
Insert(L, x);
}
}
// 输出顺序表
void Print(SeqList L) {
int i;
printf("当前顺序表元素为:");
for (i = 0; i < L.length; i++) {
printf("%d ", L.data[i]);
}
printf("\n");
}
int main() {
SeqList L;
InitList(&L);
Input(&L);
Print(L);
return 0;
}
```
在插入元素的过程中,我们先查找插入位置,然后将插入位置后面的元素往后移动一个位置,最后将要插入的元素插入到插入位置之后。这样可以保证顺序表仍然是有序的。
注意,在初始化顺序表时,我们需要动态申请内存空间,因为顺序表的容量是可变的。在插入元素时,如果顺序表已满,则无法插入元素。在输入元素时,我们可以通过循环输入的方式逐个插入元素。
阅读全文