用c语言写一个简单的顺序表,并进行简单的插入和删除1操作
时间: 2024-11-06 20:35:26 浏览: 10
在C语言中,我们可以使用数组来实现一个简单的顺序表(Sequential List)。这里是一个基本的例子,展示了如何创建顺序表、插入和删除元素:
```c
#include <stdio.h>
// 定义顺序表结构体
typedef struct {
int* data; // 整型数组存储元素
size_t size; // 当前元素数量
size_t capacity; // 数组容量
} SequenceList;
// 初始化顺序表
SequenceList init_list(int capacity) {
SequenceList list;
list.data = (int*)malloc(capacity * sizeof(int));
list.size = 0;
list.capacity = capacity;
return list;
}
// 插入元素到顺序表末尾
void insert(SequenceList* list, int value) {
if (list->size == list->capacity) {
// 如果已满,扩大容量
list->capacity *= 2;
list->data = (int*)realloc(list->data, list->capacity * sizeof(int));
}
list->data[list->size] = value;
list->size++;
}
// 删除指定索引的元素
void delete(SequenceList* list, size_t index) {
if (index >= list->size || index < 0) {
printf("Invalid index\n");
return;
}
for (size_t i = index; i < list->size - 1; i++) {
list->data[i] = list->data[i + 1];
}
list->size--;
if (list->size == 0 && list->capacity > 2) { // 节省内存,如果只剩一个元素或者为空,减小容量
list->capacity /= 2;
list->data = realloc(list->data, list->capacity * sizeof(int));
}
}
// 打印顺序表内容
void print_list(const SequenceList* list) {
for (size_t i = 0; i < list->size; i++) {
printf("%d ", list->data[i]);
}
printf("\n");
}
int main() {
SequenceList list = init_list(5);
insert(&list, 10);
insert(&list, 20);
delete(&list, 0);
print_list(&list); // 输出:20 10
free(list.data);
return 0;
}
```
在这个示例中,我们首先定义了一个`SequenceList`结构体,包含整型数组`data`、当前元素数量`size`以及容量`capacity`。然后实现了初始化、插入、删除和打印列表的操作。
注意这个例子假设动态扩容的方式比较原始,实际项目中可能会使用更高效的动态内存管理技术,如使用`std::vector`等容器。
阅读全文