C语言实现顺序存储结构线性表:初始化、插入、删除、查找等操作
C语言实现顺序存储结构线性表
简介
线性表是最基本的数据结构之一,可以使用数组或链表实现。本文将使用 C 语言实现基于顺序存储结构的线性表,并提供详细的代码示例和解释。
代码实现c#include <stdio.h>#include <stdlib.h>
// 定义线性表结构体typedef struct { int* data; // 存储元素的数组 int max_size; // 数组最大容量 int length; // 线性表当前长度} LinearList;
// 初始化线性表void init(LinearList* list, int max_size) { list->data = (int*)malloc(max_size * sizeof(int)); list->max_size = max_size; list->length = 0;}
// 判断线性表是否为空int is_empty(LinearList* list) { return list->length == 0;}
// 判断线性表是否为满int is_full(LinearList* list) { return list->length == list->max_size;}
// 重新分配数组空间大小void resize(LinearList* list, int new_size) { if (new_size < list->length) { printf('New size cannot be smaller than current length. '); return; }
list->data = (int*)realloc(list->data, new_size * sizeof(int)); list->max_size = new_size;}
// 在尾部插入一个元素void append(LinearList* list, int element) { if (is_full(list)) { resize(list, list->max_size * 2); } list->data[list->length] = element; list->length++;}
// 指定位置插入元素void insert(LinearList* list, int position, int element) { if (is_full(list)) { resize(list, list->max_size * 2); } if (position < 0 || position > list->length) { printf('Invalid position. '); return; }
for (int i = list->length; i > position; i--) { list->data[i] = list->data[i-1]; } list->data[position] = element; list->length++;}
// 指定位置删除元素void del(LinearList* list, int position) { if (position < 0 || position >= list->length) { printf('Invalid position. '); return; }
for (int i = position; i < list->length - 1; i++) { list->data[i] = list->data[i+1]; } list->length--;}
// 交换两个指定位置的元素void swap(LinearList* list, int position1, int position2) { if (position1 < 0 || position1 >= list->length || position2 < 0 || position2 >= list->length) { printf('Invalid positions. '); return; }
int temp = list->data[position1]; list->data[position1] = list->data[position2]; list->data[position2] = temp;}
// 元素查找,返回其下标位置int find(LinearList* list, int element) { for (int i = 0; i < list->length; i++) { if (list->data[i] == element) { return i; } } return -1;}
// 输出所有元素void display(LinearList* list) { for (int i = 0; i < list->length; i++) { printf('%d ', list->data[i]); } printf(' ');}
int main() { LinearList list; init(&list, 10);
// 初始状态 printf('初始线性表是否为空: %d
', is_empty(&list)); printf('初始线性表是否为满: %d ', is_full(&list));
// 插入元素 for (int i = 1; i <= 10; i++) { append(&list, i); } printf('插入10个元素后,线性表是否为空: %d
', is_empty(&list)); printf('插入10个元素后,线性表是否为满: %d ', is_full(&list)); printf('线性表中所有元素: '); display(&list);
// 插入元素到指定位置 insert(&list, 2, 11); printf('在位置2插入元素后,线性表中所有元素: '); display(&list);
// 删除指定位置的元素 del(&list, 5); printf('删除位置5的元素后,线性表中所有元素: '); display(&list);
// 交换指定位置的元素 swap(&list, 1, 3); printf('交换位置1和3的元素后,线性表中所有元素: '); display(&list);
// 查找元素 int index = find(&list, 5); printf('元素5的下标位置: %d
', index);
// 逆序输出 printf('逆序线性表中所有元素: '); for (int i = list.length - 1; i >= 0; i--) { printf('%d ', list.data[i]); } printf('
');
free(list.data);
return 0;}
代码解释
- 结构体定义: 使用
typedef struct定义了线性表的结构体LinearList,包含三个成员: -data: 指向存储元素的动态数组的指针。 -max_size: 数组的最大容量。 -length: 线性表当前的长度。2. 函数实现: 代码中实现了线性表的初始化、判断空满、重新分配空间、插入、删除、交换、查找和输出等操作函数。3. 主函数:main函数演示了如何使用上述函数创建、操作和销毁线性表。
总结
本文介绍了如何使用 C 语言实现基于顺序存储结构的线性表,并提供了详细的代码示例和解释。你可以根据自己的需要对代码进行修改和扩展,例如添加更多操作函数或修改数据类型。
原文地址: https://www.cveoy.top/t/topic/bzIJ 著作权归作者所有。请勿转载和采集!