C语言顺序表的实现与应用
顺序表是一种线性数据结构,它是由一组地址连续的存储单元依次存储数据元素构成的,在C语言中,顺序表通常使用数组来实现,顺序表具有随机访问的特点,即通过索引可以直接访问到任意位置的元素,顺序表的操作主要包括插入、删除、查找等,本文将介绍C语言顺序表的实现方法以及一些常见的应用场景。
顺序表的实现
1、定义顺序表结构体
我们需要定义一个顺序表结构体,用于存储顺序表的基本信息,结构体中包含一个数组用于存储数据元素,以及数组的长度和当前元素个数等信息。
typedef struct { int *data; // 存储数据的数组 int length; // 数组的长度 int count; // 当前元素个数 } SeqList;
2、初始化顺序表
初始化顺序表主要是为顺序表分配内存空间,并设置初始长度和当前元素个数。
void initSeqList(SeqList *list, int initSize) { list->data = (int *)malloc(initSize * sizeof(int)); if (list->data == NULL) { printf("内存分配失败! "); exit(1); } list->length = initSize; list->count = 0; }
3、插入元素
向顺序表中插入元素时,需要检查当前元素个数是否已达到数组长度,如果已达到,则需要扩容,插入元素后,更新当前元素个数。
int insert(SeqList *list, int pos, int value) { if (list->count >= list->length) { // 扩容 int newSize = list->length + (list->length >> 1); // 新长度为原长度的1.5倍 int *newData = (int *)realloc(list->data, newSize * sizeof(int)); if (newData == NULL) { printf("内存分配失败! "); exit(1); } list->data = newData; list->length = newSize; } for (int i = list->count; i > pos; i--) { // 向后移动元素 list->data[i] = list->data[i - 1]; } list->data[pos] = value; // 插入元素 list->count++; // 更新元素个数 return 0; }
4、删除元素
从顺序表中删除元素时,需要将后面的元素向前移动一位,然后更新当前元素个数,需要注意的是,删除最后一个元素时,不需要进行扩容操作。
int delete(SeqList *list, int pos) { if (pos < 0 || pos >= list->count) { // 检查位置是否合法 printf("位置不合法! "); return -1; } for (int i = pos; i < list->count - 1; i++) { // 向前移动元素 list->data[i] = list->data[i + 1]; } list->count--; // 更新元素个数 return 0; }
5、查找元素
在顺序表中查找指定元素的值,返回其位置,如果未找到,则返回-1。
int find(SeqList *list, int value) { for (int i = 0; i < list->count; i++) { // 遍历查找 if (list->data[i] == value) { return i; // 找到元素,返回位置 } } return -1; // 未找到元素,返回-1 }
顺序表的应用示例
顺序表可以应用于各种场景,如存储学生信息、存储商品信息等,以下是一个简单的示例,用于存储学生信息的顺序表实现。
发表评论