数据结构复习框架(重要考点章节)

0. 基础与复杂度(✅ 必考)

  • 数据结构三要素:逻辑结构 / 存储结构 / 操作(算法)
  • 时间复杂度
  • 符号:O(上界)、Ω(下界)、Θ(紧确界)
  • 场景:最好/最坏/平均(如快排、查找)
  • 计算方法:求和法、递推法(展开/代入)、主定理(分治类)
  • 空间复杂度
  • 关注辅助空间(不包括输入)
  • 递归算法:栈空间 = 递归深度
  • 算法特性:正确性、可读性、健壮性、效率(时间+空间)

⚠️ 常考题型:三重循环复杂度(如 for i=1..n; for j=1..i; for k=1..j)、递归式求解(如 T(n)=2T(n/2)+n


1. 线性表

1.1 顺序表

  • 地址计算Loc(a[i]) = Loc(a[0]) + i × size
  • 随机访问:O(1);插入/删除平均移动 n/2 个元素 → O(n)
  • 扩容:通常倍增(2倍),摊还复杂度 O(1)(了解即可)

1.2 链表(🔥 高频)

  • 类型:单链表 / 双链表 / 循环链表 / 静态链表(数组模拟指针)
  • 头指针 vs 头结点
  • 带头结点:判空条件为 head->next == NULL
  • 不带头结点:判空为 head == NULL
  • 操作复杂度
  • 按位查找:O(n)
  • 按值查找:O(n)
  • 典型题(✅ 必练手写)
  • 建表(头插/尾插)
  • 原地逆置(三指针法)
  • 合并两个有序链表
  • 删除指定值所有结点
  • 找中间结点(快慢指针)
  • 判环与找环入口(Floyd 快慢指针,⚠️ 常考)

2. 栈与队列(✅ 高频)

2.1 栈

  • 实现:顺序栈 / 链栈
  • 应用
  • 括号匹配
  • 表达式求值(中缀 → 后缀;后缀求值)
  • 递归调用栈(理解递归本质)
  • 合法出栈序列判断(⚠️ 常考选择题):
  • 模拟入栈出栈过程
  • 或用“栈混洗”性质(如:3 1 2 不合法)

2.2 队列

  • 顺序队列“假溢出”问题 → 引出循环队列
  • 循环队列判空/判满(⚠️ 必背):
方法队空条件队满条件特点
牺牲一单元front == rear(rear + 1) % maxSize == front最常用
引入 sizesize == 0size == maxSize无浪费
引入 tagfront == rear && tag == 0front == rear && tag == 1较少考
  • 链队列:带头结点更方便
  • 双端队列、优先队列:了解概念即可(如优先队列 ≈ 堆)

3. 串(部分院校考)

  • 存储:定长顺序串 / 堆分配存储(动态)
  • 朴素匹配:O(nm)
  • KMP 算法(✅ 必考手算):
  • next[j] = 模式串前 j 个字符的最长相等真前后缀长度
  • 构造过程:前缀表 → 右移 → 首位变 -1(或 0,看教材)
  • nextval:优化相同字符重复比较
  • 复杂度:KMP 为 O(n + m)

⚠️ 考法:给定模式串 “ababc”,手算 next/nextval 数组


4. 数组、矩阵与广义表

  • 多维数组地址计算(行优先/列优先):
  • 二维行优先:Loc[i][j] = Loc[0][0] + (i×n + j)×size
  • 特殊矩阵压缩存储
  • 对称矩阵:只存下三角(含对角线)
  • 三角矩阵:类似
  • 稀疏矩阵:三元组表 / 十字链表(后者支持高效运算)
  • 广义表(若考):
  • 长度 = 第一层元素个数
  • 深度 = 嵌套层数(递归定义)
  • 表头/表尾:如 (a,(b,c)) 的 head = a,tail = ((b,c))

5. 树与二叉树(🔥 超高频)

5.1 树的基本概念

  • 度、层次、深度(根为1)、高度(叶为1)
  • 存储结构
  • 双亲表示法(查父快)
  • 孩子表示法(查子快)
  • 孩子兄弟表示法 → 可转为二叉树(左孩右兄)

5.2 二叉树性质(✅ 必背)

  • 第 i 层最多 $2^{i-1}$ 个结点
  • 高度为 h 的二叉树最多 $2^h – 1$ 个结点
  • 完全二叉树
  • 按层编号,从 1 到 n
  • 父子关系:parent = i/2left = 2iright = 2i+1
  • 区分:满二叉树 ⊂ 完全二叉树 ⊂ 二叉树

5.3 二叉树遍历(✅ 必考)

  • 四种遍历:先序(根左右)、中序(左根右)、后序(左右根)、层序(队列)
  • 递归 & 非递归实现
  • 先/中/后:用栈模拟
  • 层序:用队列
  • 由遍历序列建树(⚠️ 高频):
  • 先+中 → 唯一
  • 后+中 → 唯一
  • 先+后 → 不唯一(除非是真二叉树)
  • 线索二叉树
  • 线索:空指针改为前驱/后继
  • 中序线索树可直接找前驱后继(无需栈)

5.4 哈夫曼树与编码(✅ 高频)

  • 构造:每次选两个最小权值合并(可用 priority_queue)
  • WPL = 所有叶结点(权值 × 路径长度)之和
  • 哈夫曼编码
  • 前缀码(任一编码不是另一编码前缀)
  • 编码长度 = 路径长度
  • 不唯一,但 WPL 唯一

⚠️ 考法:给权值 {5,29,7,8,14,23,3,11},构造哈夫曼树并求 WPL


6. 图(✅ 高频)

6.1 基本概念

  • 有向图/无向图、简单图、度(无向)、入度/出度(有向)
  • 连通(无向)/强连通(有向)
  • 存储结构对比
邻接矩阵邻接表
空间复杂度O(V²)O(V+E)
适合图类型稠密图稀疏图
查边存在O(1)O(度)

6.2 遍历

  • DFS:递归或栈,生成深度优先生成树
  • BFS:队列,生成广度优先生成树
  • 复杂度:O(V+E)

6.3 经典算法(✅ 必会手算)

  • 最小生成树(MST)
  • Prim:从点出发,适合稠密图(邻接矩阵)
  • Kruskal:从边出发 + 并查集,适合稀疏图(邻接表)
  • 最短路径
  • Dijkstra:单源、非负权(⚠️ 高频手算)
  • Floyd:多源、可有负权(但不能有负环),动态规划
  • Bellman-Ford:了解(可处理负权,检测负环)
  • 拓扑排序(AOV 网):
  • 入度为 0 的顶点入队
  • 若无法排完 → 有环
  • 关键路径(AOE 网):
  • 事件最早时间 ve、最迟时间 vl
  • 活动最早开始 e、最迟开始 l
  • 关键活动:e == l
  • 总工期 = 最后事件的 ve

7. 查找(🔥 超高频)

7.1 线性表查找

  • 顺序查找:O(n),可用于无序表
  • 折半查找(✅ 必考):
  • 前提:有序顺序表
  • 判定树:完全二叉树(不成功查找的外部结点)
  • ASL 成功 ≈ log₂(n+1) – 1

7.2 树表查找

  • 二叉排序树(BST)
  • 中序遍历为有序序列
  • 平均查找 O(log n),最坏(退化为链)O(n)
  • 删除:分三种情况(无子、单子、双子)
  • 平衡二叉树(AVL)(⚠️ 必考旋转):
  • 平衡因子 ∈ {-1, 0, 1}
  • 四种旋转
    • LL:右旋
    • RR:左旋
    • LR:先左旋再右旋
    • RL:先右旋再左旋
  • 插入后从最低不平衡点开始调整
  • B⁻/B⁺树(概念题):
  • m 阶 B⁻树:根至少 2 个子,非根至少 ⌈m/2⌉ 个子
  • B⁺树:所有关键字在叶结点,叶结点链式连接(数据库索引)

7.3 散列(哈希)(✅ 高频)

  • 冲突处理
  • 开放定址:线性探测(易聚集)、二次探测(缓解)、双散列
  • 链地址法(拉链法):更常用,删除方便
  • 装填因子 α = n / m(n: 元素数,m: 表长)
  • 查找效率
  • 成功 ASL:与 α 正相关
  • 失败 ASL:开放定址需探到空单元

⚠️ 考法:给关键字序列和哈希函数,画出哈希表,计算 ASL


8. 排序(🔥 超高频)

8.1 基本概念

  • 稳定性:相等元素相对位置是否改变
  • 原地性:是否只用 O(1) 辅助空间
  • 比较类 vs 非比较类(如基数排序)
  • 内排序 vs 外排序(了解)

8.2 重点排序算法(✅ 必会手推)

算法时间(最好/平均/最坏)稳定原地备注
直接插入O(n) / O(n²) / O(n²)初始有序时最优
希尔排序依赖增量增量序列常考(如 n/2, n/4…)
冒泡排序O(n) / O(n²) / O(n²)可加 flag 优化
快速排序O(n log n) / O(n log n) / O(n²)⚠️(递归栈)⚠️ 高频大题:手写 partition
简单选择O(n²) 全部交换次数少
堆排序O(n log n) 全部大根堆 → 升序;建堆 O(n)
归并排序O(n log n) 全部需 O(n) 辅助空间
基数排序O(d(n+r))d: 位数,r: 基数

💡 口诀快希选堆不稳定,插冒归基都稳定
⚠️ 常考:给初始序列,写出快排/堆排序每一趟结果;问稳定性/比较次数


9. 常考综合题型清单(刷题优先级)

题型典型考法建议
复杂度三重循环、递推式掌握求和与主定理
链表判空(带头/不带头)、逆置、合并、快慢指针手写代码,注意边界
表达式转换、合法出栈序列模拟 + 规律记忆
遍历互推、完全二叉树编号、哈夫曼 WPL画图辅助
Dijkstra/Floyd 手算、MST、拓扑序、关键路径步骤化训练
查找BST 删除、AVL 旋转、哈希冲突处理熟悉调整过程
排序手推每一趟、问稳定性/趟数/比较次数对比记忆


本技术内容仅供学习和交流使用,如有疑问请联系qq2014160588并注明来意。请确保在使用过程中遵守相关法律法规。任何因使用本技术内容而导致的直接或间接损失,作者概不负责。用户需自行承担因使用本技术内容而产生的所有风险和责任。请勿将本技术内容用于任何非法用途。
上一篇
下一篇