要求先进行顺序表的结构体定义,之后初始化一个顺序表L=(10,20,30,40),请上级编程实现: 1)打印插入操作前的顺序表。 2)尝试插入元素x到位置2,打印插入操作后的顺序表。 (请上
时间: 2024-09-20 10:11:46 浏览: 22
2.2 顺序表结构体定义和基本操作1
首先,我们假设顺序表(也称为线性表)的结构如下,它包含一个整数数组和一个指针指向当前列表的头部:
```c
typedef struct {
int* elements; // 存储元素的地址
int size; // 当前元素的数量
int capacity; // 序列的最大容量
} SequenceList;
```
为了实现这个顺序表并完成你的任务,我们可以创建一个顺序表结构,并按照指定步骤进行操作:
```c
#include <stdio.h>
#include <stdlib.h>
// 初始化顺序表
SequenceList initialize_list(int initial_size) {
SequenceList L = {NULL, 0, initial_size};
L.elements = malloc(L.capacity * sizeof(int)); // 分配内存
if (L.elements) {
// 初始化列表
for (int i = 0; i < initial_size; ++i) {
L.elements[i] = 0; // 这里假设初始值都是0
printf("Element %d: %d\n", i + 1, L.elements[i]);
}
} else {
printf("Memory allocation failed.\n");
return L;
}
return L;
}
// 插入元素
void insert(SequenceList* L, int position, int x) {
if (position > L->size || position <= 0) {
printf("Invalid insertion position.\n");
return;
}
if (L->size == L->capacity) {
L->capacity *= 2; // 如果已满,扩容一倍
L->elements = realloc(L->elements, L->capacity * sizeof(int));
if (!L->elements) {
printf("Memory reallocation failed.\n");
return;
}
}
// 将x移动到新位置
memmove(&L->elements[position+1], &L->elements[position], (L->size - position) * sizeof(int));
L->elements[position] = x;
L->size++;
}
int main() {
SequenceList L = initialize_list(4); // 初始化顺序表,大小为4
// 打印插入操作前的顺序表
print_sequence_list(L);
// 插入元素x到位置2
insert(&L, 2, 50);
// 打印插入操作后的顺序表
print_sequence_list(L);
free(L.elements); // 清理内存
return 0;
}
// 辅助函数:打印顺序表
void print_sequence_list(const SequenceList& L) {
for (int i = 0; i < L.size; ++i) {
printf("Element %d: %d\n", i + 1, L.elements[i]);
}
}
```
阅读全文