编写一个往已有若干元素的顺序表中第i个元素前插入一个数据元素的程序。假设表中已有元素为:33 44 55,要求:输入插入位置,及待插元素;输出插入后的顺序表中的元素C语言代码
时间: 2024-09-30 15:13:01 浏览: 30
在C语言中,你可以通过创建一个新的动态数组来实现这个功能。以下是一个简单的示例代码片段,它将插入到已排序的顺序表(这里我们假设是一个整数数组)中:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX_SIZE 100 // 用于存储列表的最大容量
// 定义顺序表结构体
typedef struct {
int* elements; // 整型指针,指向元素
int size; // 当前元素的数量
int capacity; // 列表最大容量
} SeqList;
// 插入函数
void insert(SeqList* list, int i, int data) {
if (i < 0 || i > list->size) {
printf("Invalid index.\n");
return;
}
// 如果需要扩大数组,先扩容
if (list->size == list->capacity) {
list->capacity *= 2;
list->elements = (int*)realloc(list->elements, sizeof(int) * list->capacity);
}
// 移动元素,为新元素腾空间
for (int j = list->size - 1; j >= i; j--) {
list->elements[j + 1] = list->elements[j];
}
// 插入新元素
list->elements[i] = data;
list->size++;
}
// 示例顺序表初始化并打印
void display(SeqList* list) {
for (int i = 0; i < list->size; i++) {
printf("%d ", list->elements[i]);
}
printf("\n");
}
int main() {
SeqList list = {NULL, 0, MAX_SIZE};
list.elements = (int*)malloc(sizeof(int) * MAX_SIZE); // 初始化空数组
// 假设初始元素
list.elements[0] = 33;
list.elements[1] = 44;
list.elements[2] = 55;
// 插入操作示例
int position, data;
printf("Enter the position to insert and the value: ");
scanf("%d %d", &position, &data);
insert(&list, position, data);
// 输出插入后的顺序表
display(&list);
free(list.elements); // 释放内存
return 0;
}
```
运行此程序时,用户可以输入要插入的位置和值,然后会看到插入新元素后的顺序表。
阅读全文