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("



还没有评论,来说两句吧...