数据结构C语言顺序表的插入删除,查找定位合并实现,给出代码
时间: 2024-12-08 15:21:03 浏览: 28
在C语言中,顺序表(也称为数组)是一种基础的数据结构,它通过连续的内存空间存储元素。下面是顺序表的基本操作,如插入、删除、查找、定位和合并的一些实现示例:
**顺序表结构体定义:**
```c
typedef struct List {
int *data; // 存储数据的指针
int size; // 当前元素的数量
int capacity; // 容量,即预先分配的大小
} List;
```
**初始化和查找操作:**
```c
void init_list(List *list) {
list->data = NULL;
list->size = 0;
list->capacity = 0;
}
int search(List *list, int target) {
for (int i = 0; i < list->size; ++i) {
if (list->data[i] == target)
return i;
}
return -1; // 如果未找到目标值,则返回-1
}
```
**插入操作:**
```c
void insert(List *list, int value) {
if (list->size == list->capacity) {
// 扩容
list->capacity *= 2;
void* old_data = list->data;
list->data = realloc(list->data, sizeof(int) * list->capacity);
if (!list->data)
exit(1); // 内存分配失败
memmove(list->data + 1, old_data, sizeof(int) * list->size);
}
list->data[list->size++] = value;
}
```
**删除操作(假设我们要删除第一个匹配的元素):**
```c
void delete(List *list, int target) {
if (search(list, target) != -1) {
memmove(&list->data[target], &list->data[target+1], sizeof(int) * (list->size-1));
list->size--;
if (list->size < list->capacity / 4 && list->size > 0) {
// 缩容,当列表过小但仍有一定的容量时
list->capacity /= 2;
list->data = realloc(list->data, sizeof(int) * list->capacity);
if (!list->data)
exit(1); // 内存分配失败
}
}
}
```
**合并两个顺序表:**
```c
List merge(const List *list1, const List *list2) {
List merged_list;
merged_list.data = malloc(sizeof(int) * (list1->size + list2->size));
if (!merged_list.data)
exit(1);
memcpy(merged_list.data, list1->data, sizeof(int) * list1->size);
memcpy(merged_list.data + list1->size, list2->data, sizeof(int) * list2->size);
merged_list.size = list1->size + list2->size;
merged_list.capacity = max(list1->capacity, list2->capacity);
return merged_list;
}
```
请注意,上述代码没有处理所有的边界情况和错误处理,实际使用时需要添加适当的错误检查。此外,这个例子使用的是动态内存管理,因此在C标准库中并没有`memmove()`等函数,你需要用`memcpy()`配合指针计算移动数据。
阅读全文