1. 线性表概述
线性表是 n 个具有相同特性的数据元素的有限序列。在实际应用中非常广泛,常见的如顺序表、链表、栈、队列等。
从逻辑上看,线性表是一条连续的直线。但在物理存储上,它不一定连续。通常以数组(顺序存储)或链式结构(链式存储)来实现。
2. 顺序表详解
2.1 概念及结构
顺序表是用一组连续的存储单元依次存储线性表的数据元素。简单来说,就是把元素一个挨着一个放在数组中。
2.1.1 静态顺序表
静态顺序表使用定长数组,长度固定。如果定义的长度太大,空间浪费;太小则不够用。仅适用于确定知道数据量的场景,实际开发中较少使用。
typedef int SLDataType;
#define N 7
typedef struct SeqList {
SLDataType array[N];
int size;
} SL;
2.1.2 动态顺序表
动态顺序表更灵活,可以根据需要调整大小,符合大多数场景。
typedef int SLDataType;
#define INIT_CAPACITY 4
typedef struct SeqList {
SLDataType* a;
int size;
int capacity;
} SL;
2.2 接口实现
以下实现基于动态顺序表,包含初始化、销毁、增删查改等核心功能。
2.2.1 打印顺序表
遍历当前有效数据并输出。访问指针前务必加断言保护。
void SLPrint(SL* ps) {
assert(ps);
for (int i = 0; i < ps->size; ++i) {
printf("%d ", ps->a[i]);
}
printf("\n");
}
2.2.2 初始化
分配初始容量内存,初始化 size 为 0。
void SeqInit {
assert(ps);
ps->a = (SLDataType*)((SLDataType) * INIT_CAPACITY);
(ps->a == ) {
perror();
;
}
ps->size = ;
ps->capacity = INIT_CAPACITY;
}


