适合读者:软考中级备考同学
阅读时间:6分钟
内容:数据结构与算法板块知识体系回顾、核心对比表、易错点汇总、下期预告
一、板块内容概览
"数据结构与算法"板块共完成 30篇 文章,覆盖以下知识模块:
| 知识模块 | 篇数 | 核心内容 |
|---|---|---|
| 基础概念 | 3篇 | 数据结构定义、逻辑结构与物理结构、ADT、时间复杂度与空间复杂度 |
| 线性结构 | 5篇 | 顺序表、单链表、双向链表、循环链表、栈、队列、循环队列 |
| 串 | 2篇 | 串的基本概念与存储、KMP模式匹配算法 |
| 树与二叉树 | 6篇 | 树的基本概念、二叉树定义与性质、存储结构、四种遍历、BST、AVL、哈夫曼树 |
| 图 | 6篇 | 图的基本概念、存储结构(邻接矩阵/邻接表)、DFS、BFS、最小生成树(Prim/Kruskal)、最短路径(Dijkstra/Floyd) |
| 查找 | 3篇 | 顺序查找、折半查找、哈希表 |
| 排序 | 5篇 | 插入排序、冒泡排序、快速排序、简单选择排序、堆排序、归并排序、基数排序、八大排序对比总结 |
二、核心对比表
2.1 线性结构对比
| 结构 | 存储方式 | 插入/删除(已知位置) | 随机访问 | 适用场景 |
|---|---|---|---|---|
| 顺序表(数组) | 连续内存 | O(n)O(n)O(n)(需移动元素) | ✅ O(1)O(1)O(1) | 查找多、增删少 |
| 单链表 | 链式(单指针) | O(1)O(1)O(1)(插入)/ O(n)O(n)O(n)(删除需找前驱) | ❌ O(n)O(n)O(n) | 增删多、查找少 |
| 双向链表 | 链式(双指针) | O(1)O(1)O(1) | ❌ O(n)O(n)O(n) | 需要双向遍历 |
| 栈 | 顺序/链式 | 只在栈顶操作 O(1)O(1)O(1) | ❌ | 函数调用、表达式求值 |
| 队列 | 顺序(循环)/链式 | 队尾入队 O(1)O(1)O(1),队头出队 O(1)O(1)O(1) | ❌ | 排队系统、BFS |
2.2 树结构对比
| 树类型 | 定义特征 | 遍历结果 | 查找效率 | 插入/删除 |
|---|---|---|---|---|
| 普通二叉树 | 每个节点最多2个子节点 | 前/中/后/层次 | O(n)O(n)O(n) | O(n)O(n)O(n) |
| 二叉排序树(BST) | 左小右大 | 中序递增有序 | 平均 O(logn)O(\log n)O(logn),最坏 O(n)O(n)O(n) | 平均 O(logn)O(\log n)O(logn) |
| 平衡二叉树(AVL) | BST + 平衡因子 ≤1\le 1≤1 | 中序递增有序 | 始终 O(logn)O(\log n)O(logn) | 需旋转调整 |
| 哈夫曼树 | 带权路径长度最短 | --- | --- | 用于编码压缩 |
2.3 图存储与遍历对比
| 存储方式 | 空间复杂度 | 判断边存在 | 求顶点度 | 适合图类型 |
|---|---|---|---|---|
| 邻接矩阵 | O(n2)O(n^2)O(n2) | O(1)O(1)O(1) | O(n)O(n)O(n) | 稠密图 |
| 邻接表 | O(n+e)O(n+e)O(n+e) | O(degree)O(degree)O(degree) | O(1)O(1)O(1)(出度) | 稀疏图 |
| 遍历方式 | 核心数据结构 | 遍历策略 | 是否适合求最短路径 |
|---|---|---|---|
| DFS(深度优先) | 栈(递归) | 一条路走到黑 | ❌ |
| BFS(广度优先) | 队列 | 层层推进 | ✅(无权图) |
2.4 最小生成树算法对比
| 算法 | 策略 | 时间复杂度 | 适合图类型 |
|---|---|---|---|
| Prim | 从顶点出发,每次选最小边 | O(n2)O(n^2)O(n2) / O(elogn)O(e \log n)O(elogn) | 稠密图 |
| Kruskal | 从边出发,每次选全局最小边 | O(eloge)O(e \log e)O(eloge) | 稀疏图 |
2.5 最短路径算法对比
| 算法 | 解决的问题 | 核心思想 | 时间复杂度 | 支持负权边 |
|---|---|---|---|---|
| Dijkstra | 单源最短路径 | 贪心(每次选dist最小顶点) | O(n2)O(n^2)O(n2) / O(elogn)O(e \log n)O(elogn) | ❌ 不支持 |
| Floyd | 多源最短路径 | 动态规划(kkk 在最外层) | O(n3)O(n^3)O(n3) | ✅ 支持(无负权环) |
2.6 八大排序算法全景对比
| 算法 | 平均时间复杂度 | 最好情况 | 最坏情况 | 空间复杂度 | 稳定性 |
|---|---|---|---|---|---|
| 插入排序 | O(n2)O(n^2)O(n2) | O(n)O(n)O(n) | O(n2)O(n^2)O(n2) | O(1)O(1)O(1) | ✅ 稳定 |
| 希尔排序 | O(n1.3)O(n^{1.3})O(n1.3) | O(n)O(n)O(n) | O(n2)O(n^2)O(n2) | O(1)O(1)O(1) | ❌ 不稳定 |
| 冒泡排序 | O(n2)O(n^2)O(n2) | O(n)O(n)O(n) | O(n2)O(n^2)O(n2) | O(1)O(1)O(1) | ✅ 稳定 |
| 快速排序 | O(nlogn)O(n \log n)O(nlogn) | O(nlogn)O(n \log n)O(nlogn) | O(n2)O(n^2)O(n2) | O(logn)O(\log n)O(logn) | ❌ 不稳定 |
| 简单选择 | O(n2)O(n^2)O(n2) | O(n2)O(n^2)O(n2) | O(n2)O(n^2)O(n2) | O(1)O(1)O(1) | ❌ 不稳定 |
| 堆排序 | O(nlogn)O(n \log n)O(nlogn) | O(nlogn)O(n \log n)O(nlogn) | O(nlogn)O(n \log n)O(nlogn) | O(1)O(1)O(1) | ❌ 不稳定 |
| 归并排序 | O(nlogn)O(n \log n)O(nlogn) | O(nlogn)O(n \log n)O(nlogn) | O(nlogn)O(n \log n)O(nlogn) | O(n)O(n)O(n) | ✅ 稳定 |
| 基数排序 | O(d(n+r))O(d(n+r))O(d(n+r)) | O(d(n+r))O(d(n+r))O(d(n+r)) | O(d(n+r))O(d(n+r))O(d(n+r)) | O(n+r)O(n+r)O(n+r) | ✅ 稳定 |
2.7 查找算法对比
| 算法 | 前提条件 | 平均时间复杂度 | 空间复杂度 | 适用场景 |
|---|---|---|---|---|
| 顺序查找 | 无要求 | O(n)O(n)O(n) | O(1)O(1)O(1) | 数据量小、无序 |
| 折半查找 | 必须有序 | O(logn)O(\log n)O(logn) | O(1)O(1)O(1) | 数据量大、有序、静态 |
| 哈希表查找 | 需要哈希函数 | O(1)O(1)O(1)(平均) | O(n)O(n)O(n) | 频繁查找、对实时性要求高 |
三、易错点汇总
| 易错点 | 正确理解 |
|---|---|
| 满二叉树一定是完全二叉树 | ✅ 正确 |
| 完全二叉树一定是满二叉树 | ❌ 错误 |
| 二叉排序树的中序遍历是递减有序 | ❌ 是递增有序 |
| 折半查找要求数据必须升序 | ❌ 升序或降序均可,但必须有序 |
| 强连通图至少需要 n−1n-1n−1 条边 | ❌ 至少需要 nnn 条边(构成环) |
| 连通图至少需要 nnn 条边 | ❌ 至少需要 n−1n-1n−1 条边 |
| 无向图邻接表链表节点总数为 eee | ❌ 是 2e2e2e |
| DFS使用队列,BFS使用栈 | ❌ DFS用栈,BFS用队列 |
| Prim算法适合稀疏图 | ❌ Prim适合稠密图 |
| Kruskal算法适合稠密图 | ❌ Kruskal适合稀疏图 |
| Dijkstra可以处理负权边 | ❌ 不能处理负权边 |
| Floyd算法中转点放在最内层 | ❌ 中转点 kkk 放在最外层 |
| 堆排序是稳定排序 | ❌ 堆排序不稳定 |
| 快速排序在所有情况下都快 | ❌ 最坏情况 O(n2)O(n^2)O(n2) |
| 哈希表的查找效率一定高于折半查找 | ❌ 最坏情况下哈希表可能退化为 O(n)O(n)O(n) |
| 基数排序通过比较元素大小来排序 | ❌ 基数排序不比较大小 |
四、记忆口诀汇总
二叉树性质:
第 iii 层最多 2i−12^{i-1}2i−1,深度 kkk 满 2k−12^k - 12k−1,n0=n2+1n_0 = n_2 + 1n0=n2+1,完全二叉树编号灵:左 2i2i2i 右 2i+12i+12i+1。
遍历:
前序根左右,中序左根右,后序左右根,层次用队列。
图术语:
连通图 n−1n-1n−1,强连通图 nnn,完全图 n(n−1)/2n(n-1)/2n(n−1)/2(无向)。
图存储:
邻接矩阵 O(n2)O(n^2)O(n2) 适稠密,邻接表 O(n+e)O(n+e)O(n+e) 适稀疏。
最小生成树:
Prim从顶点长,稠密图它最强;Kruskal从边合,稀疏图它最妥。
最短路径:
Dijkstra贪心单源,负权边不能沾;Floyd动态多源,kkk 最外层是关键。
排序稳定性:
插冒归基 (稳定),快选堆希(不稳定)。
排序选型:
基本有序用插入,大量数据用快排;要求稳定用归并,内存紧张用堆排。
五、板块总结表
| 板块 | 完成篇数 | 状态 |
|---|---|---|
| 1. 计算机系统知识 | 28篇 | ✅ 已完成 |
| 2. 程序语言与编译 | 16篇 | ✅ 已完成 |
| 3. 操作系统 | 28篇 | ✅ 已完成 |
| 4. 软件工程 | 24篇 | ✅ 已完成 |
| 5. 面向对象技术 | 16篇 | ✅ 已完成 |
| 6. 数据结构与算法 | 30篇 | ✅ 已完成 |
| 7. 数据库技术 | 20篇 | 即将开始 |
六、数据报告
截至2026年8月25日,你的CSDN博客数据:
| 指标 | 数值 |
|---|---|
| 总访问量 | 100,135 |
| 原创文章 | 151篇 |
| 粉丝数 | 481 |
| 博客总排名 | 14,781名 |
6个板块共完成 142篇 技术文章,系统性地覆盖了软件设计师考试的核心知识点。专栏内容已初步形成体系。
七、下期预告:板块7 -- 数据库技术
预计更新 20篇 ,时间:8.26 -- 9.8(共14天)
数据库技术在软考中占 8-12分,上午选择题和下午SQL题都有涉及。主要内容:
| 知识模块 | 核心内容 |
|---|---|
| 数据库系统概述 | 数据库管理系统(DBMS)、三级模式结构(外模式/模式/内模式)、两级映像 |
| 数据模型 | 层次模型、网状模型、关系模型(重点) |
| 关系代数 | 选择、投影、连接、除运算(下午题必考) |
| SQL语言 | DDL、DML、DCL、嵌套查询、分组查询 |
| 规范化理论 | 函数依赖、1NF/2NF/3NF/BCNF(选择题必考) |
| 事务管理 | ACID特性、并发控制、封锁协议 |
| 数据库设计 | ER图、E-R模型转关系模型(下午题必考) |
特别注意 :关系代数 (选择/投影/连接)和E-R图转关系模型是下午题的必考内容,写文章时会重点讲解解题方法。
从下一篇文章开始,我们将进入 数据库技术 板块。请持续关注本专栏,每日更新,陪你一起拿下软考中级!
🔔 本专栏日更,点击头像 → 专栏《软考中级高频考点》订阅,第一时间接收新内容
#软考中级 #软件设计师 #数据结构与算法 #板块总结 #数据库技术 #软考备考