用C语言实现:“实验内容一:建立4个元素的顺序表list[] = {2, 3 , 4 , 5},实现顺序表建立及插入和删除的基本操作。实验要求:(1) 用一种方式(动态分配或静态分配)实现顺序表的建立;(2) 实现顺序表的插入操作;(3) 实现顺序表的删除操作”要求:代码
时间: 2024-11-25 13:11:41 浏览: 23
在C语言中,我们可以选择动态分配内存来实现顺序表,因为它能根据需要增加或减少元素的数量。以下是实现顺序表建立、插入和删除的基本操作:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义顺序表结构体
typedef struct {
int *data; // 数据指针
int size; // 当前元素个数
int capacity; // 最大容量
} List;
// 初始化顺序表
void init_list(List *lst) {
lst->data = (int*)malloc(sizeof(int) * 4); // 初始大小为4
lst->size = 0;
lst->capacity = 4;
}
// 插入操作
void insert(List *lst, int value) {
if (lst->size == lst->capacity) { // 如果已满,扩大数组
lst->capacity *= 2;
lst->data = (int*)realloc(lst->data, sizeof(int) * lst->capacity);
}
lst->data[lst->size++] = value; // 插入元素并更新元素个数
}
// 删除操作(假设删除的是第一个元素)
void delete(List *lst) {
if (lst->size > 0) {
memmove(lst->data, lst->data + 1, sizeof(int) * (lst->size - 1)); // 移动其他元素到空位
lst->size--; // 减少元素个数
if (lst->size == lst->capacity / 4 && lst->capacity != 0) { // 如果空间利用率低,减小容量
lst->capacity /= 2;
lst->data = (int*)realloc(lst->data, sizeof(int) * lst->capacity);
}
}
}
// 打印顺序表
void print_list(const List *lst) {
for (int i = 0; i < lst->size; i++) {
printf("%d ", lst->data[i]);
}
printf("\n");
}
int main() {
List list;
init_list(&list);
insert(&list, 6);
print_list(&list); // 输出: 2 3 4 5 6
delete(&list);
print_list(&list); // 输出: 2 3 4
free(list.data); // 清理内存
return 0;
}
```
阅读全文