顺序表c语言代码实现包括初始化,销毁,判断空表,表长度,输出,按序号查找,按元素查找,插入,删除操作
时间: 2024-10-12 07:13:25 浏览: 44
在C语言中,我们可以使用数组来模拟顺序表。以下是基本的操作实现:
```c
#include <stdio.h>
// 定义顺序表结构体
typedef struct {
int* data; // 存储数据的指针
int size; // 当前表大小
int capacity; // 表的最大容量
} SeqList;
// 初始化函数
SeqList init_list(int cap) {
SeqList list;
list.data = (int*)malloc(cap * sizeof(int));
if (!list.data) {
printf("Memory allocation failed.\n");
return NULL;
}
list.size = 0;
list.capacity = cap;
return list;
}
// 销毁函数
void destroy_list(SeqList* list) {
free(list->data);
list->size = list->capacity = 0;
}
// 判断是否为空
int is_empty(SeqList list) {
return list.size == 0;
}
// 获取表长
int get_length(SeqList list) {
return list.size;
}
// 输出序列
void print_list(SeqList list) {
for (int i = 0; i < list.size; i++) {
printf("%d ", list.data[i]);
}
printf("\n");
}
// 按序号查找
int find_by_index(SeqList list, int index) {
if (index >= list.size || index < 0) {
printf("Index out of range.\n");
return -1;
}
return list.data[index];
}
// 按值查找
int find_by_value(SeqList list, int value) {
for (int i = 0; i < list.size; i++) {
if (list.data[i] == value) {
return i;
}
}
return -1; // 如果未找到,返回-1
}
// 插入操作
void insert(SeqList* list, int value, int pos) {
if (pos < 0 || pos > list->size) {
printf("Invalid position.\n");
return;
}
if (list->size == list->capacity) {
list->capacity *= 2;
list->data = realloc(list->data, list->capacity * sizeof(int));
if (!list->data) {
printf("Memory reallocation failed.\n");
return;
}
}
list->data[pos] = value;
list->size++;
}
// 删除操作
void delete(SeqList* list, int pos) {
if (is_empty(*list) || pos < 0 || pos >= list->size) {
printf("Invalid operation.\n");
return;
}
memmove(&list->data[pos], &list->data[pos + 1], (list->size - pos - 1) * sizeof(int));
list->size--;
}
// 示例:
int main() {
SeqList list = init_list(5); // 初始化列表,容量为5
// ... 使用以上函数...
destroy_list(&list); // 销毁列表
return 0;
}
```
阅读全文