13.1.1 线性结构知识点概述
线性结构是数据结构中最基础的一类。它的“线性”不是说数据一定排在连续内存里,而是说从逻辑关系上看,除第一个和最后一个元素外,每个元素都有唯一直接前驱和唯一直接后继。
线性结构学什么
课程把线性结构分成四类:线性表、栈、队列和串。其中栈与队列是考试重点,因为它们经常考操作规则和序列判断;串的考题频率不算最高,但一旦考模式匹配,难度往往偏大。
| 结构 | 逻辑特征 | 存储/操作重点 | 考试关注 |
|---|---|---|---|
| 线性表 | 元素一对一排列 | 顺序表与链表两种存储 | 查找、插入、删除代价对比 |
| 栈 | 只允许在栈顶操作 | 后进先出 LIFO | 出栈序列是否合法 |
| 队列 | 队尾入、队头出 | 先进先出 FIFO | 队列序列、循环队列条件 |
| 串 | 字符组成的有限序列 | 子串、模式串、匹配 | BF/KMP 模式匹配 |
逻辑结构与存储结构要分开
很多初学者会把“线性表”和“数组”混在一起。严格说,线性表是逻辑结构,数组/顺序表/链表是存储方式。
mermaid
flowchart LR
L["线性表:逻辑上一对一"] --> S["顺序存储:连续地址"]
L --> C["链式存储:节点用指针连接"]
S --> A["顺序表/数组"]
C --> B["单链表/双链表/循环链表"]同一个逻辑结构可以有不同的物理存储。选择存储方式时,本质是在查找速度、插入删除代价、空间利用率之间做权衡。
线性结构的共同操作
| 操作 | 关注问题 |
|---|---|
| 读取第 | 能否直接定位地址 |
| 查找某个值 | 是否必须逐个比较 |
| 插入元素 | 是否要移动后续元素,或只改指针 |
| 删除元素 | 是否要找到前驱,是否要移动元素 |
| 遍历 | 是否能从头到尾按逻辑顺序访问 |
线性结构为什么是高频基础
栈、队列、串、数组、链表不仅单独考,也会出现在树、图和算法题里。例如:
| 后续知识 | 与线性结构的关系 |
|---|---|
| 二叉树遍历 | 递归本质依赖调用栈;层序遍历依赖队列 |
| 图的 BFS | 需要队列保存待访问顶点 |
| 图的 DFS | 可用递归栈或显式栈 |
| 字符串算法 | 建立在数组式顺序存储和下标移动上 |
本节例题
线性结构中“线性”的主要含义是:
自查清单
- 能否区分逻辑结构和存储结构?
- 能否说明顺序表、链表、栈、队列、串之间的关系?
- 能否说出栈和队列为什么属于“操作受限的线性表”?