1.线性表顺序存储结构下基本操作的实现(初始化、赋值、取值、查找、插入、删除、两个非递减有序顺序表的归并等)C语言代码。
时间: 2024-12-24 11:21:48 浏览: 9
数据结构C严蔚敏版_全注释源码_线性表队列栈监视哨查找折半直接插入排序冒泡快速选择
在C语言中,线性表的顺序存储结构通常使用数组实现。下面是一些基本操作的简单示例:
```c
#include <stdio.h>
// 定义结构体,假设我们的线性表元素是整数
typedef struct {
int data;
int size; // 存储空间大小
int capacity; // 实际可用空间
} List;
// 初始化一个空列表
void init(List* list) {
list->data = NULL;
list->size = 0;
list->capacity = 0;
}
// 赋值操作(插入)
void assign(List* list, int value) {
if (list->size == list->capacity) {
resize_list(list);
}
list->data[list->size++] = value;
}
// 取值操作
int get_value(const List* list, int index) {
if (index < 0 || index >= list->size) {
printf("Index out of bounds.\n");
return -1; // 返回错误值
}
return list->data[index];
}
// 查找操作
int search(const List* list, int target) {
for (int i = 0; i < list->size; i++) {
if (list->data[i] == target) {
return i;
}
}
return -1; // 没找到目标值
}
// 插入操作(在指定位置)
void insert(List* list, int index, int value) {
if (index < 0 || index > list->size) {
printf("Invalid index.\n");
return;
}
// 如果需要扩容
if (list->size + 1 == list->capacity) {
resize_list(list);
}
memmove(&list->data[index + 1], &list->data[index], sizeof(int) * (list->size - index));
list->data[index] = value;
list->size++;
}
// 删除操作
void remove(List* list, int index) {
if (index < 0 || index >= list->size) {
printf("Invalid index.\n");
return;
}
memmove(&list->data[index], &list->data[index + 1], sizeof(int) * (list->size - index - 1));
list->size--;
}
// 两个非递减有序表的合并
List merge_sorted_lists(List* list1, List* list2) {
List merged_list;
init(&merged_list);
while (list1->size && list2->size) {
if (list1->data[list1->size - 1] <= list2->data[0]) {
assign(&merged_list, list1->data[--list1->size]);
} else {
assign(&merged_list, list2->data[0]);
list2->data[--list2->size];
}
}
// 将剩余元素添加到结果列表
while (list1->size) {
assign(&merged_list, list1->data[--list1->size]);
}
while (list2->size) {
assign(&merged_list, list2->data[--list2->size]);
}
return merged_list;
}
// 扩展列表容量
void resize_list(List* list) {
list->capacity *= 2;
list->data = (int*)realloc(list->data, list->capacity * sizeof(int));
}
```
以上代码展示了如何实现线性表的基本操作。请注意,在实际项目中,为了提高效率,可以使用动态内存分配和更复杂的算法优化。
阅读全文