数据结构c语言版顺序表实现增删改查基本操作的代码
时间: 2024-09-10 09:28:00 浏览: 99
在C语言中,顺序表(也称为动态数组)的基本操作包括插入、删除、查找和修改元素。这里以动态顺序表为例,假设`SeqList`定义如下:
```c
typedef struct SeqList {
int* arr; // 指向元素的指针
int capacity; // 容量(最多可以存储的元素数量)
int size; // 当前元素的数量
} SeqList;
```
以下是实现这些基本操作的代码片段:
1. **创建** (初始化) 序列表:
```c
// 动态创建顺序表
SeqList* createSeqList(int capacity) {
SeqList* list = malloc(sizeof(SeqList));
list->arr = malloc(capacity * sizeof(int)); // 分配内存
list->capacity = capacity;
list->size = 0;
return list;
}
// 插入元素 (在末尾)
void insert(SeqList* list, int value) {
if (list->size == list->capacity) {
list->capacity *= 2; // 扩容
list->arr = realloc(list->arr, list->capacity * sizeof(int));
}
list->arr[list->size++] = value;
}
```
2. **查找** 元素:
```c
int search(SeqList* list, int key) {
for (int i = 0; i < list->size; i++) {
if (list->arr[i] == key) {
return i; // 如果找到返回索引
}
}
return -1; // 如果未找到,返回-1表示不存在
}
```
3. **删除** 元素:
```c
void delete(SeqList* list, int index) {
if (index >= 0 && index < list->size) {
memmove(&list->arr[index], &list->arr[index + 1], (list->size - index - 1) * sizeof(int)); // 移动元素
list->size--;
if (list->size < list->capacity / 4 && list->capacity > 0) { // 裁剪容量,避免浪费
list->capacity /= 2;
list->arr = realloc(list->arr, list->capacity * sizeof(int));
}
}
}
```
4. **修改** 元素:
```c
void update(SeqList* list, int oldIndex, int newValue) {
if (oldIndex >= 0 && oldIndex < list->size) {
list->arr[oldIndex] = newValue;
} else {
printf("Invalid index\n");
}
}
```
请注意,以上代码示例仅用于说明基本概念,实际应用中可能需要考虑更多的边界条件和错误处理。
阅读全文