数据结构考研知识点总结
一、数据结构思维导图(文字超清版)
1️⃣ 绪论
数据结构
├── 基本概念
│ ├── 数据 / 数据元素 / 数据项
│ ├── 逻辑结构(集合、线性、树、图)
│ └── 存储结构(顺序、链式、索引、散列)
├── 算法
│ ├── 特性(有穷、确定、可行)
│ ├── 时间复杂度 O(1)/O(n)/O(logn)/O(n²)
│ └── 空间复杂度
2️⃣ 线性表
线性表
├── 顺序表
│ ├── 随机访问 O(1)
│ └── 插入删除 O(n)
├── 链表
│ ├── 单链表
│ ├── 双链表
│ └── 循环链表
└── 重点
├── 头插/尾插
├── 快慢指针
└── 链表反转🔥
3️⃣ 栈 & 队列
栈(LIFO)
├── 顺序栈 / 链栈
├── 应用
│ ├── 括号匹配
│ ├── 表达式求值
│ └── 递归
队列(FIFO)
├── 循环队列🔥
├── 队满:(rear+1)%n=front
└── 双端队列
4️⃣ 串
串
├── 基本操作
├── BF算法
└── KMP🔥
├── next数组
└── 部分匹配思想
5️⃣ 树
树
├── 二叉树
│ ├── 性质🔥
│ ├── 遍历(前中后层)🔥
│ └── 存储结构
├── 特殊树
│ ├── 完全二叉树
│ ├── BST🔥
│ ├── AVL🔥
│ └── 哈夫曼树🔥
6️⃣ 图
图
├── 存储
│ ├── 邻接矩阵
│ └── 邻接表🔥
├── 遍历
│ ├── DFS
│ └── BFS🔥
├── 应用
│ ├── 最小生成树(Prim/Kruskal)
│ ├── 最短路径(Dijkstra🔥)
│ └── 拓扑排序🔥
7️⃣ 查找
查找
├── 顺序查找
├── 折半查找🔥
└── 哈希🔥
├── 冲突处理
└── 装填因子
8️⃣ 排序🔥🔥🔥
排序
├── 插入排序
├── 冒泡排序
├── 快速排序🔥
├── 归并排序🔥
├── 堆排序🔥
└── 重点
├── 时间复杂度
├── 稳定性
└── 最坏情况
二、各章节必做100题(精编高频题)
① 线性表(12题)
- 顺序表插入第i个元素移动次数
- 删除元素时间复杂度分析
- 单链表逆置(必考)
- 找链表中点(快慢指针)
- 判断链表是否有环
- 合并两个有序链表
- 删除重复节点
- 双链表插入操作
- 循环链表判断尾节点
- 静态链表理解
- 链表长度计算
- 头插 vs 尾插区别
② 栈和队列(12题)
- 判断出栈序列是否合法🔥
- 栈实现表达式计算
- 中缀→后缀转换🔥
- 括号匹配问题
- 递归转非递归
- 循环队列判满🔥
- 队列长度计算🔥
- 双端队列输出序列
- 两个栈实现队列
- 栈溢出判断
- 队列溢出判断
- 最小栈设计
③ 串(10题)
- BF算法匹配过程
- KMP next数组求法🔥
- nextval优化
- 模式匹配步骤
- 子串查找
- 字符串比较
- 最长公共前缀
- 字符串逆置
- 字符统计
- KMP时间复杂度分析
④ 树(18题🔥)
- 前中序 → 建树🔥
- 中后序 → 建树🔥
- 二叉树遍历(递归+非递归)🔥
- 层序遍历
- 二叉树高度计算
- 叶子节点数计算
- 完全二叉树判断
- BST查找
- BST删除🔥
- AVL旋转🔥
- 哈夫曼树构造🔥
- WPL计算🔥
- 先序线索化
- 判断是否平衡树
- 树转二叉树
- 最近公共祖先
- 路径长度计算
- 节点层次判断
⑤ 图(18题🔥)
- DFS遍历🔥
- BFS遍历🔥
- 邻接矩阵→邻接表
- 判断连通图
- 生成树概念
- Prim算法🔥
- Kruskal算法🔥
- Dijkstra步骤🔥🔥
- Floyd算法
- 拓扑排序🔥
- 判断有环
- 入度计算
- 最短路径树
- 关键路径(AOE网)
- 边数计算
- 图的存储选择
- 强连通分量
- 图遍历复杂度
⑥ 查找(10题)
- 顺序查找成功/失败比较次数
- 折半查找过程🔥
- 判定树构造
- 哈希冲突处理🔥
- 装填因子计算🔥
- 查找长度ASL
- 开放定址法
- 链地址法
- 查找性能分析
- 静态查找表
⑦ 排序(20题🔥🔥🔥)
- 快速排序过程🔥
- 快排最坏情况🔥
- 归并排序过程🔥
- 堆排序建堆🔥
- 冒泡排序优化
- 插入排序步骤
- 各排序时间复杂度🔥
- 稳定性判断🔥
- 排序趟数计算
- 堆调整过程
- 分治思想理解
- 外排序
- 基数排序
- 希尔排序
- 排序比较次数
- 最优/最坏情况
- 排序应用选择
- 链表适合排序
- 数据规模分析
- 排序算法对比🔥
三、冲刺建议(非常关键🔥)
你现在应该这样做:
- 第1遍:看思维导图(建立体系)
- 第2遍:刷这100题(每天10题)
- 第3遍:专攻👇
- 树(建树+遍历)
- 图(Dijkstra+拓扑)
- 排序(快排+归并)
数据结构考研核心知识点总结
第一章:绪论
本章是基础,主要考察基本概念的理解和算法复杂度的计算。
1. 数据结构三要素
逻辑结构(与计算机无关):
集合结构:元素同属一个集合,无其他关系。
线性结构:一对一(如线性表、栈、队列)。
树形结构:一对多(如二叉树、堆)。
图状/网状结构:多对多(如图)。
存储结构(物理结构):
顺序存储:逻辑相邻则物理相邻(数组),支持随机访问。
链式存储:指针表示逻辑关系(链表),不支持随机访问。
索引存储:建立索引表(关键字,地址)。
散列存储:通过哈希函数计算地址。
数据运算:定义在逻辑结构上,实现于存储结构上(如增删改查)。
2. 算法分析
时间复杂度 T(n)T(n)T(n):
常见排序:O(1)<O(log2n)<O(n)<O(nlog2n)<O(n2)<O(n3)<O(2n)O(1) < O(\log_2 n) < O(n) < O(n \log_2 n) < O(n^2) < O(n^3) < O(2^n)O(1)<O(log2n)<O(n)<O(nlog2n)<O(n2)<O(n3)<O(2n)。
计算规则:加法法则(取最大量级)、乘法法则(嵌套循环相乘)。
空间复杂度 S(n)S(n)S(n):
包括固定部分(代码、常量)和可变部分(动态分配空间、递归栈)。
递归算法的空间复杂度 = 递归深度 ×\times× 每次递归所需辅助空间。
第二章:线性表
线性表是基础,重点在于顺序表与链表的对比及操作实现。
1. 顺序表
特点:随机访问 O(1)O(1)O(1),插入删除需移动元素 O(n)O(n)O(n),存储密度高。
核心操作:
插入:判断表满 -> 移动元素(从后向前) -> 赋值 -> 长度+1。
删除:判断表空 -> 保存删除值 -> 移动元素(从前向后) -> 长度-1。
2. 链表
单链表:
头结点:引入头结点可使首元节点的操作与其他节点一致,简化代码。
头插法:新节点插入头结点之后(会导致逆序)。
尾插法:增加尾指针,新节点插入尾部(保持顺序)。
双链表:
节点包含 prior 和 next 指针。
插入/删除:需同时修改前驱和后继的指针,注意操作顺序(先连后断)。
循环链表:
尾结点的 next 指向头结点。
判空:L->next == L(带头结点)。
静态链表:
用数组实现,游标(next)模拟指针。适用于不支持指针的语言或特定场景。
3. 顺序表 vs 链
存取方式:顺序表支持随机存取;链表仅支持顺序存取。
查找效率:按值查找两者均为 O(n)O(n)O(n);按位查找顺序表 O(1)O(1)O(1),链表 O(n)O(n)O(n)。
插入删除:顺序表 O(n)O(n)O(n);链表找到位置后 O(1)O(1)O(1)。
第三章:栈、队列与数组
1. 栈
特性:后进先出(LIFO)。
●
存储结构:
顺序栈:top 指针指向栈顶元素。判满 top == MaxSize-1,判空 top == -1。
共享栈:两个栈共用一维数组,栈底分别在两端,向中间增长。判满条件:top1 + 1 == top2。
链栈:通常采用带头结点的单链表,头插法入栈,头删法出栈。
应用:括号匹配、表达式求值(中缀转后缀/前缀)、递归(系统栈)。
2. 队列
特性:先进先出(FIFO)。
存储结构:
循环队列(顺序存储):解决“假溢出”。
判空:front == rear。
判满:(rear + 1) % MaxSize == front(牺牲一个单元)。
入队:rear = (rear + 1) % MaxSize。
链队列:带头结点,队头出队,队尾入队。
双端队列:两端均可进出。
3. 数组与矩阵
数组:顺序存储,计算地址(行优先/列优先)。
特殊矩阵压缩存储:
对称矩阵:只存下三角(或上三角),k=i(i−1)/2+j−1k = i(i-1)/2 + j - 1k=i(i−1)/2+j−1。
三对角矩阵:带状存储。
稀疏矩阵:三元组顺序表(行、列、值)或十字链表。
4. 串
模式匹配:
BF算法:朴素匹配,回溯,O(mn)O(mn)O(mn)。
KMP算法:主串指针不回溯。
Next数组:表示模式串的最长相等前后缀长度。
Nextval数组:对Next的优化,避免重复字符的无效比较。
第四章:树与二叉树
1. 二叉树性质
第 iii 层最多有 2i−12^{i-1}2i−1 个节点。
深度为 kkk 的二叉树最多有 2k−12^k - 12k−1 个节点。
完全二叉树:叶子节点只出现在最下两层,且最下层叶子集中在左侧。
满二叉树:每一层节点数都达到最大值。
2. 存储结构
顺序存储:适用于完全二叉树,利用数组下标关系(iii 的左孩子 2i2i2i,右孩子 2i+12i+12i+1)。
链式存储:二叉链表(lchild, data, rchild)。
3. 遍历
先序/中序/后序:递归实现简单,非递归实现需借助栈。
层序遍历:借助队列实现。
线索二叉树:利用空指针域存放前驱或后继线索,加快查找前驱/后继的速度。
4. 特殊树
二叉排序树:左 < 根 < 右。查找、插入、删除效率取决于树高。
平衡二叉树:左右子树高度差绝对值 ≤1\le 1≤1。调整方法:LL、RR、LR、RL旋转。
哈夫曼树:带权路径长度(WPL)最短。构造方法:每次选两个权值最小的节点合并。
森林与二叉树转换:左孩子右兄弟表示法。
第五章:图
1. 存储结构
邻接矩阵:适合稠密图,判断边存在 O(1)O(1)O(1),空间 O(n2)O(n^2)O(n2)。
邻接表:适合稀疏图,空间 O(n+e)O(n+e)O(n+e),查找边需遍历链表。
十字链表(有向图)、邻接多重表(无向图)。
2. 遍历
深度优先搜索:类似树的先序遍历,用栈(递归)。
广度优先搜索:类似树的层序遍历,用队列。
3. 重要算法
最小生成树:
Prim算法:加点法,适合稠密图,复杂度 O(n2)O(n^2)O(n2)。
Kruskal算法:加边法(并查集),适合稀疏图,复杂度 O(eloge)O(e \log e)O(eloge)。
最短路径:
Dijkstra:单源最短路径(权值非负),贪心策略。
Floyd:多源最短路径,动态规划,复杂度 O(n3)O(n^3)O(n3)。
拓扑排序:AOV网,检测有向环(入度为0的顶点入队)。
关键路径:AOE网,求最早/最晚发生时间,确定关键活动。
第六章:查找
1. 静态查找
顺序查找:O(n)O(n)O(n)。
折半查找:仅适用于有序顺序表,O(log2n)O(\log_2 n)O(log2n)。判定树为平衡二叉树。
分块查找:块间有序,块内无序。
2. 动态查找
二叉排序树:查找效率 O(h)O(h)O(h)。
B树与B+树:多路平衡查找树,主要用于数据库和文件系统索引。
B树:关键字分布在所有节点,搜索可能在非叶子节点结束。
B+树:关键字仅在叶子节点,且叶子节点链式连接,适合范围查找。
3. 哈希表
哈希函数构造:直接定址、除留余数法等。
冲突处理:
开放定址法:线性探测(易聚集)、平方探测。
链地址法:拉链法,适合插入删除频繁。
查找效率:取决于装填因子 α\alphaα = 表中记录数 / 哈希表长度。
第七章:排序
1. 插入排序
直接插入:稳定,O(n2)O(n^2)O(n2),适合基本有序。
希尔排序:缩小增量排序,不稳定,O(n1.3)O(n^{1.3})O(n1.3)。
2. 交换排序
冒泡排序:稳定,O(n2)O(n^2)O(n2)。
快速排序:不稳定,平均 O(nlogn)O(n \log n)O(nlogn),最坏 O(n2)O(n^2)O(n2)(有序时)。空间复杂度 O(logn)O(\log n)O(logn)(递归栈)。
3. 选择排序
简单选择:不稳定,O(n2)O(n^2)O(n2),比较次数固定。
堆排序:不稳定,O(nlogn)O(n \log n)O(nlogn)。
大顶堆:升序排列。
应用:Top K问题、优先级队列。
4. 归并排序
二路归并,稳定,O(nlogn)O(n \log n)O(nlogn),空间 O(n)O(n)O(n)。
5. 基数排序
多关键字排序,稳定,O(d(n+r))O(d(n+r))O(d(n+r))。
6. 排序
稳定排序:直接插入、冒泡、归并、基数。
不稳定排序:希尔、快速、简单选择、堆。
辅助空间:堆排序 O(1)O(1)O(1),快速排序 O(logn)O(\log n)O(logn),归并排序 O(n)O(n)O(n)。
更多推荐

所有评论(0)