C语言顺序表的实现与应用
顺序表是线性表的一种,它是由一组地址连续的存储单元依次存储数据元素构成的,在C语言中,顺序表的实现主要依赖于数组,顺序表具有随机访问的特点,即通过索引可以直接访问到表中的任何元素,顺序表的优点是操作简单,插入和删除元素的效率较高;缺点是插入和删除元素时需要移动大量元素,可能会导致内存碎片。
顺序表的实现
1、定义顺序表结构体
typedef struct { int *data; // 存储数据的数组 int length; // 当前顺序表的长度 int capacity; // 顺序表的最大容量 } SeqList;
2、初始化顺序表
void initSeqList(SeqList *list, int capacity) { list->data = (int *)malloc(sizeof(int) * capacity); list->length = 0; list->capacity = capacity; }
3、插入元素
int insert(SeqList *list, int index, int value) { if (list->length == list->capacity) { return -1; // 容量不足,无法插入 } for (int i = list->length; i > index; i--) { list->data[i] = list->data[i - 1]; // 向后移动元素 } list->data[index] = value; // 插入元素 list->length++; // 长度加1 return 0; // 插入成功 }
4、删除元素
int delete(SeqList *list, int index) { if (index < 0 || index >= list->length) { return -1; // 索引无效,无法删除 } for (int i = index; i < list->length - 1; i++) { list->data[i] = list->data[i + 1]; // 向前移动元素 } list->length--; // 长度减1 free(list->data + list->length); // 释放多余的空间 list->capacity--; // 容量减1 return 0; // 删除成功 }
5、查找元素
int find(SeqList *list, int value) { for (int i = 0; i < list->length; i++) { if (list->data[i] == value) { return i; // 找到元素,返回索引 } } return -1; // 未找到元素,返回-1 }
顺序表的应用实例
#include <stdio.h> #include "seq_list.h" // 引入顺序表头文件 int main() { SeqList list; // 定义顺序表变量 initSeqList(&list, 10); // 初始化顺序表,最大容量为10 printf("请输入10个整数:"); for (int i = 0; i < 10; i++) { scanf("%d", &list.data[i]); // 从键盘输入数据,存入顺序表 } printf("顺序表中的元素为:"); for (int i = 0; i < list.length; i++) { printf("%d ", list.data[i]); // 输出顺序表中的元素 } printf(" "); printf("请输入要查找的元素:"); int value; scanf("%d", &value); // 从键盘输入要查找的元素值 int index = find(&list, value); // 查找元素,返回索引或-1表示未找到 if (index != -1) { printf("元素%d在顺序表中的位置为:%d", value, index); // 输出元素位置信息 } else { printf("未找到元素%d", value); // 输出未找到信息 } printf("
还没有评论,来说两句吧...