C语言顺序表的实现与应用

顺序表是一种线性数据结构,它是由一组地址连续的存储单元依次存储数据元素构成的,在C语言中,顺序表通常使用数组来实现,顺序表具有随机访问的特点,即通过索引可以直接访问到任意位置的元素,顺序表的操作主要包括插入、删除、查找等,本文将介绍C语言顺序表的实现方法以及一些常见的应用场景。

顺序表的实现

1、定义顺序表结构体

我们需要定义一个顺序表结构体,用于存储顺序表的基本信息,结构体中包含一个数组用于存储数据元素,以及数组的长度和当前元素个数等信息。

typedef struct {
    int *data; // 存储数据的数组
    int length; // 数组的长度
    int count; // 当前元素个数
} SeqList;

c语言顺序表 c语言顺序表的初始化,插曲,删除,与查找

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
}

顺序表的应用示例

顺序表可以应用于各种场景,如存储学生信息、存储商品信息等,以下是一个简单的示例,用于存储学生信息的顺序表实现。