线性表与顺序表概念
在深入顺序表之前,先明确线性表的定义。线性表是 n 个具有相同特性的数据元素的有限序列,属于抽象逻辑结构,仅描述元素间的'一对一'相邻关系。其核心特征包括逻辑连续性、有限性及通用性。
线性表在逻辑上是线性的,但在物理存储上并不一定连续。常见的实现方式有数组(顺序存储)和链表(链式存储)。
逻辑结构:线性表的本质定义,必须是线性的。 物理结构:逻辑结构的存储实现,可以是线性的(如数组),也可以是非线性的(如链表)。
简单来说:线性表 = 逻辑结构(线性)+ 物理结构(可选线性/非线性存储)。
顺序表概念与结构
顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构,通常采用数组实现。根据上述定义,顺序表的逻辑结构和物理结构均为线性。
顺序表的底层结构是数组,是对数组的封装,实现了常用的增删改查等接口。与原始数组相比,顺序表通过结构体封装提供了数据管理功能(如动态扩容、接口封装)。

数组 vs 顺序表:
- 数组:物理存储结构,仅提供存放空间,不自带管理功能。
- 顺序表:逻辑结构的实现方式,基于数组封装,提供容量提示、自动扩容等管理功能。
静态与动态顺序表对比
顺序表根据底层数组特性分为两类,均需通过结构体封装。
静态顺序表
静态顺序表使用定长数组存储元素,空间在初始化时确定。若空间不足则无法插入,若空间过大则造成浪费。
struct A {
int a[100]; // 定长数组
int size; // 有效数据个数
};

动态顺序表
动态顺序表克服了静态顺序表容量固定的缺点,大小可根据元素数量动态调整(扩容/缩容)。
核心特点:
- 底层结构:动态分配的数组(通过
malloc/realloc管理内存)。 - 动态性:容量不足时自动扩容(通常按原容量的 2 倍或 1.5 倍增长)。
- 随机访问:支持 O(1) 时间复杂度的元素访问。
- 顺序存储:元素在内存中连续存放。
struct {
* a;
size;
capacity;
};



