
本书是计算机专业研究生入学考试“数据结构”课程的复习用书,内容包括绪论、线性表、栈和队列、串、树与二叉树、图、查找、排序等。全书严格按照最新计算机考研大纲的数据结构部分,对大纲所涉及的知识点进行集中梳理,力求内容精炼、重点突出、深入浅出。本书精选各名校的历年考研真题,并给出详细的解题思路,力求实现讲练结合、灵活掌握、举一反三的功效。通过“书本+在线”的学习方式和网上答疑方式,读者在使用本书时遇到的任何疑难点,都可以在王道论坛发帖与道友互动。
前 言 2011年,由王道论坛(cskaoyan.com)组织名校状元级选手,编写了4本单科辅导书——“王道考研系列”。这套书不仅参考了优秀的国内外教材和辅导书,而且结合了高分选手自己的复习经验,无论是对考点的讲解,还是对习题的选择和解析,都结合了他们对专业课复习的独特见解。2021年我们继续推出“王道考研系列”单科书,一共4本: ? 《2022年数据结构考研复习指导》 ? 《2022年计算机组成原理考研复习指导》 ? 《2022年操作系统考研复习指导》 ? 《2022年计算机网络考研复习指导》 2022版王道单科书针对近年来的命题规律对考点讲解进行了优化,优化的细节读者可以通过王道论坛或“王道在线”公众号了解;此外,还修正了读者在上一版本中发现的错误,重新筛选了部分习题,尤其是对部分习题的解析做了改进。 后期在冲刺阶段,王道还将出版2本冲刺用书: ? 《2022年计算机专业基础综合考试历年真题解析》 ? 《2022年计算机专业基础综合考试核心考点及模拟题》 当然,深入掌握专业课内容没有捷径,考生也不应抱有任何侥幸心理,扎扎实实打好基础、踏踏实实做题巩固,最后灵活致用才是高分的保障。我们希望这套书能够指导大家复习考研,但学习还是得靠自己,高分不是建立在任何空中楼阁之上的。对于一个想继续在计算机领域深造的考生来说,认真学习和扎实掌握计算机专业中这4门最基础的专业课,是最基本的前提。 “王道考研系列”是计算机考研学子口碑相传的辅导书,自2011版首次推出以来,在同类书中的销量始终遥遥领先。有这么多学长学姐的成功经验,我相信只要考生合理地利用这套书,并采用合理的复习方法,就一定会收获属于自己的那份回报。 读者在复习时遇到的疑问,可以通过读者QQ群(573910042)交流。此外,也请读者关注“王道在线”公众号(wangdaoluntan),其中会及时推送勘误及配套视频的相关情况。 从2018年起,我们围绕这套书迭代开发了一系列计算机考研在线课程,赢得了众多“上岸”学子的好评,这些课程仅在“中国大学MOOC”上有售。对于2022版的正版书读者,我们将赠送相应的考点讲解视频,读者可通过封面上的兑换码进行兑换。 “不包就业、不包推荐,培养有态度的码农。”王道训练营是王道团队打造的线下魔鬼式编程训练营。打下编程功底、增强项目经验,彻底转行入行,不再迷茫,期待有梦想的你! 参与本书编写工作的主要有赵霖、罗乐、张鸿林、韩京儒、李志龙、兰钊、廖正松、罗文浩、刘中磊、陈赫、张松、张帅。 予人玫瑰,手有余香,王道论坛伴你一路同行! 风华漫舞
目 录 第1章 绪论 1 1.1 数据结构的基本概念 1 1.1.1 基本概念和术语 1 1.1.2 数据结构三要素 2 1.1.3 本节试题精选 3 1.1.4 答案与解析 4 1.2 算法和算法评价 5 1.2.1 算法的基本概念 5 1.2.2 算法效率的度量 5 1.2.3 本节试题精选 6 1.2.4 答案与解析 8 归纳总结 10 思维拓展 11 第2章 线性表 12 2.1 线性表的定义和基本操作 12 2.1.1 线性表的定义 12 2.1.2 线性表的基本操作 13 2.1.3 本节试题精选 13 2.1.4 答案与解析 13 2.2 线性表的顺序表示 14 2.2.1 顺序表的定义 14 2.2.2 顺序表上基本操作的实现 15 2.2.3 本节试题精选 17 2.2.4 答案与解析 19 2.3 线性表的链式表示 28 2.3.1 单链表的定义 28 2.3.2 单链表上基本操作的实现 28 2.3.3 双链表 32 2.3.4 循环链表 33 2.3.5 静态链表 34 2.3.6 顺序表和链表的比较 35 2.3.7 本节试题精选 36 2.3.8 答案与解析 41 归纳总结 60 思维拓展 60 第3章 栈和队列 61 3.1 栈 61 3.1.1 栈的基本概念 61 3.1.2 栈的顺序存储结构 62 3.1.3 栈的链式存储结构 64 3.1.4 本节试题精选 64 3.1.5 答案与解析 67 3.2 队列 73 3.2.1 队列的基本概念 73 3.2.2 队列的顺序存储结构 74 3.2.3 队列的链式存储结构 76 3.2.4 双端队列 77 3.2.5 本节试题精选 79 3.2.6 答案与解析 81 3.3 栈和队列的应用 86 3.3.1 栈在括号匹配中的应用 86 3.3.2 栈在表达式求值中的应用 87 3.3.3 栈在递归中的应用 88 3.3.4 队列在层次遍历中的应用 89 3.3.5 队列在计算机系统中的应用 89 3.3.6 本节试题精选 90 3.3.7 答案与解析 92 3.4 特殊矩阵的压缩存储 97 3.4.1 数组的定义 97 3.4.2 数组的存储结构 97 3.4.3 矩阵的压缩存储 98 3.4.4 稀疏矩阵 100 3.4.5 本节试题精选 100 3.4.6 答案与解析 101 归纳总结 103 思维拓展 103 第4章 串 104 4.1 串的定义和实现 104 4.1.1 串的定义 104 4.1.2 串的存储结构 105 4.1.3 串的基本操作 106 4.2 串的模式匹配 106 4.2.1 简单的模式匹配算法 106 4.2.2 改进的模式匹配算法——KMP算法 107 4.2.3 KMP算法的进一步优化 112 4.2.4 本节试题精选 112 4.2.5 答案与解析 113 归纳总结 117 思维拓展 118 第5章 树与二叉树 119 5.1 树的基本概念 119 5.1.1 树的定义 119 5.1.2 基本术语 120 5.1.3 树的性质 121 5.1.4 本节试题精选 121 5.1.5 答案与解析 122 5.2 二叉树的概念 123 5.2.1 二叉树的定义及其主要特性 123 5.2.2 二叉树的存储结构 125 5.2.3 本节试题精选 126 5.2.4 答案与解析 128 5.3 二叉树的遍历和线索二叉树 132 5.3.1 二叉树的遍历 132 5.3.2 线索二叉树 136 5.3.3 本节试题精选 139 5.3.4 答案与解析 144 5.4 树、森林 161 5.4.1 树的存储结构 161 5.4.2 树、森林与二叉树的转换 163 5.4.3 树和森林的遍历 164 *5.4.4 树的应用——并查集 165 5.4.5 本节试题精选 166 5.4.6 答案与解析 168 5.5 树与二叉树的应用 174 5.5.1 二叉排序树(BST) 174 5.5.2 平衡二叉树 177 5.5.3 哈夫曼树和哈夫曼编码 180 5.5.4 本节试题精选 182 5.5.5 答案与解析 186 归纳总结 197 思维拓展 198 第6章 图 199 6.1 图的基本概念 199 6.1.1 图的定义 199 6.1.2 本节试题精选 202 6.1.3 答案与解析 204 6.2 图的存储及基本操作 206 6.2.1 邻接矩阵法 206 6.2.2 邻接表法 207 6.2.3 十字链表 209 6.2.4 邻接多重表 209 6.2.5 图的基本操作 210 6.2.6 本节试题精选 211 6.2.7 答案与解析 213 6.3 图的遍历 216 6.3.1 广度优先搜索 216 6.3.2 深度优先搜索 218 6.3.3 图的遍历与图的连通性 219 6.3.4 本节试题精选 220 6.3.5 答案与解析 222 6.4 图的应用 227 6.4.1 最小生成树 227 6.4.2 最短路径 229 6.4.3 有向无环图描述表达式 232 6.4.4 拓扑排序 233 6.4.5 关键路径 234 6.4.6 本节试题精选 236 6.4.7 答案与解析 244 归纳总结 256 思维拓展 257 第7章 查找 258 7.1 查找的基本概念 258 7.2 顺序查找和折半查找 259 7.2.1 顺序查找 259 7.2.2 折半查找 261 7.2.3 分块查找 262 7.2.4 本节试题精选 263 7.2.5 答案与解析 266 7.3 B树和B+树 271 7.3.1 B树及其基本操作 271 7.3.2 B+树的基本概念 274 7.3.3 本节试题精选 275 7.3.4 答案与解析 277 7.4 散列表 282 7.4.1 散列表的基本概念 282 7.4.2 散列函数的构造方法 282 7.4.3 处理冲突的方法 283 7.4.4 散列查找及性能分析 284 7.4.5 本节试题精选 285 7.4.6 答案与解析 288 归纳总结 293 思维拓展 293 第8章 排序 294 8.1 排序的基本概念 295 8.1.1 排序的定义 295 8.1.2 本节试题精选 295 8.1.3 答案与解析 296 8.2 插入排序 296 8.2.1 直接插入排序 296 8.2.2 折半插入排序 298 8.2.3 希尔排序 298 8.2.4 本节试题精选 299 8.2.5 答案与解析 301 8.3 交换排序 303 8.3.1 冒泡排序 303 8.3.2 快速排序 304 8.3.3 本节试题精选 306 8.3.4 答案与解析 308 8.4 选择排序 314 8.4.1 简单选择排序 314 8.4.2 堆排序 315 8.4.3 本节试题精选 317 8.4.4 答案与解析 319 8.5 归并排序和基数排序 323 8.5.1 归并排序 323 8.5.2 基数排序 324 8.5.3 本节试题精选 326 8.5.4 答案与解析 327 8.6 各种内部排序算法的比较及应用 329 8.6.1 内部排序算法的比较 329 8.6.2 内部排序算法的应用 330 8.6.3 本节试题精选 331 8.6.4 答案与解析 332 8.7 外部排序 336 8.7.1 外部排序的基本概念 336 8.7.2 外部排序的方法 336 8.7.3 多路平衡归并与败者树 337 8.7.4 置换-选择排序(生成初始归并段) 338 8.7.5 最佳归并树 339 8.7.6 本节试题精选 340 8.7.7 答案与解析 341 归纳总结 344 思维拓展 345 参考文献 346