【C语言14】C语言实现顺序表(这可能是CSDN有史以来讲解最详细的顺序表)
发布人:shili8
发布时间:2025-01-15 21:50
阅读次数:0
**C语言实现顺序表**
顺序表是一种常见的数据结构,用于存储一组元素的集合。它是通过在内存中连续分配一段空间来实现的,每个元素占据一个连续的位置。在本文中,我们将详细介绍如何使用C语言实现顺序表。
**1. 顺序表的定义**
顺序表是一种线性数据结构,所有元素都按照一定的顺序排列在一起。每个元素都有一个唯一的索引(下标),可以通过该索引来访问和操作元素。
**2. 顺序表的基本操作**
顺序表支持以下基本操作:
* **插入**:将新元素插入到指定位置。
* **删除**:从指定位置删除元素。
* **查找**:根据关键字找到对应的元素。
* **排序**:按一定规则对元素进行排序。
**3. 顺序表的实现**
下面是C语言中顺序表的基本实现:
c#include <stdio.h> #include <stdlib.h> // 定义顺序表结构体typedef struct { int *data; // 元素数组 int size; // 当前元素数量 int capacity; // 最大容量} SeqList; // 初始化顺序表void init(SeqList *list, int capacity) { list->size =0; list->capacity = capacity; list->data = (int *)malloc(sizeof(int) * capacity); } // 插入元素void insert(SeqList *list, int index, int value) { if (index < 0 || index > list->size) { printf("插入位置错误 "); return; } // 扩容 if (list->size == list->capacity) { list->capacity *=2; list->data = (int *)realloc(list->data, sizeof(int) * list->capacity); } for (int i = list->size; i > index; --i) { list->data[i] = list->data[i -1]; } list->data[index] = value; ++list->size; } // 删除元素void delete(SeqList *list, int index) { if (index < 0 || index >= list->size) { printf("删除位置错误 "); return; } for (int i = index; i < list->size -1; ++i) { list->data[i] = list->data[i +1]; } --list->size; // 缩容 if (list->size <= list->capacity /2 && list->capacity >16) { list->capacity /=2; list->data = (int *)realloc(list->data, sizeof(int) * list->capacity); } } // 查找元素int find(SeqList *list, int value) { for (int i =0; i < list->size; ++i) { if (list->data[i] == value) { return i; } } return -1; } // 排序void sort(SeqList *list) { // 冒泡排序 for (int i =0; i < list->size -1; ++i) { for (int j =0; j < list->size - i -1; ++j) { if (list->data[j] > list->data[j +1]) { int temp = list->data[j]; list->data[j] = list->data[j +1]; list->data[j +1] = temp; } } } } // 打印顺序表void print(SeqList *list) { for (int i =0; i < list->size; ++i) { printf("%d ", list->data[i]); } printf(" "); }
**4. 使用示例**
cint main() { SeqList list; init(&list,10); insert(&list,0,5); insert(&list,1,3); insert(&list,2,8); print(&list); // 输出:538 delete(&list,1); print(&list); // 输出:58 int index = find(&list,8); printf("元素 %d 的索引为 %d ",8, index); // 输出: 元素8 的索引为1 sort(&list); print(&list); // 输出:58 return0; }
在本文中,我们详细介绍了C语言实现顺序表的基本概念、操作和示例代码。顺序表是一种常见的数据结构,用于存储一组元素的集合。在实际应用中,可以使用上述代码作为参考来实现自己的顺序表功能。