本书基于抽象数据类型的观点讲解数据结构,力图让读者学会以“积木式”组件方案快速、便捷、高效地构建程序. 数据结构要为算法服务,因此本书以算法分析为导向,以算法效率为准绳,着墨于抽象数据类型的选择、使用和组合,从而实现提升算法性能的终极目标. 全书采用 C++语言描述程序,并尽量与 C++11标准靠拢,力求紧跟程序设计语言的时代脉搏. 本书特色在于以标准模板库(STL)高效地编写C++程序代码,并特别论及了各种容器的算法性能优劣,从而让读者能够更好地使用 STL容器.
本书可作为高等院校计算机科学与技术等本科专业的数据结构课程教材,也可供相关专业的工程技术人员参考.
范文澜曾云“板凳要坐十年冷”, Peter Norvig也写过一篇异曲同工的Teach Yourself Programming in Ten Years妙文. 尽管一般人不可能用十年去培养非常专业的功底, 但我们希望在有限的课程时间内培养出学生的基本技能, 并为他们打开程序设计这扇神奇之窗.那么如何尽快学会搭建程序呢? 乐高积木为我们提供了一种很好的思路, 学生只需使用基本的“积木式”组件便可迅速完成程序设计. 抽象数据类型正是这样的积木, 而C++的标准模板库(STL)已为我们准备好了.在学会组建程序的基础上, 我们要求从算法角度分析效率, 而抽象数据类型的简约性更利于我们在宏观上尽快给出优良的方案设计. 因此, 贯穿全书的主线是抽象数据类型的选择、使用和组合.我们特别强调在抽象数据类型选用时必须以算法分析为导向, 以算法效率为准绳. 对于以不同抽象数据类型为要素的实现方案, 其选择标准是完成整个方案所需的时空开销.此外, 我们还会关注同一抽象数据类型在不同数据结构实现下的性能差异. 在上述思想指导下, 本书力求给出一种全新的模式, 让学生尽快学会高效使用抽象数据类型, 最终为后续的算法设计课程打下坚实的基础.
第1 章 章 算 法 法 1
11 概述 1
12 [实例] 二分查找 3
13 程序性能与算法分析 5
14 渐近记号 9
15 [技巧] 阶的快速比较* 13
16 习题 18
第2 章 章 抽 象 数 据 类 型 型 19
21 概述 19
22 [实例] 在数据集中查找给定值 20
23 数据库与数据集 25
24 功能与实现 27
25 [技巧] 组装使用 36
26 STL容器一览 38
27 设计模式 40
28 习题 43
第3 章 章 向 量 量 45
31 概述 45
32 [使用] vector 45
33 vector的简要实现 48
34 加倍技术* 54
35 [技巧] 物理存储与进制换算 56
36 [技巧] 自然数映射与下标 59
37 [实例] 矩阵的向量实现 61
38 习题 67
第4 章 章 递 归 归 71
41 概述 71
42 [技巧] 递归设计与归纳证明 72
43 递归与进程模型 75
VI 目录
44 递归算法性能分析 76
45 [实例] 排列生成器* 79
46 [实例] 乐高铺砖 84
47 习题 89
第5 章 章 栈 栈 91
51 概述 91
52 [使用] stack 92
53 stack的简要实现 94
54 [技巧] 逻辑表达式优化 97
55 [实例] 路径搜索 104
56 习题108
第6 章 章 队 列 列 109
61 概述109
62 [使用] queue 109
63 [技巧] 循环向量设计 111
64 queue的简要实现114
65 [实例] 贾宪三角 121
66 [技巧] 排队组织与内蕴次序123
67 习题124
第7 章 章 链 链 127
71 概述127
72 [使用] list 128
73 [技巧] 用于链接的指针 132
74 链的变种 137
75 list的简要实现*138
76 [技巧] 基于归纳的初始条件选取149
77 [实例] 归并排序 151
78 习题155
第8 章 章 二 叉 树 树 157
81 概述157
82 二叉树与树 158
83 [技巧] 二叉树遍历 161
84 [技巧] 递归处理二叉树 165
目录 VII
85 [实例] 二叉查找树 168
86 习题173
第9 章 章 集 合 合 175
91 概述175
92 [使用] set与multiset175
93 [实例] 寻找宝藏 178
94 [技巧] 哨兵179
95 [技巧] 集合与序关系 182
96 [技巧] 不相交集 184
97 习题189
第10 章 章 优 先 级 队 列 列 191
101 概述191
102 [使用] priority_queue 192
103 [技巧] 维护最大元 193
104 priority_queue的简要实现196
105 [实例] 堆排序 200
106 [实例] Huffman编码203
107 习题209
第11 章 章 图 图 211
111 概述211
112 图的表示 213
113 图类217
114 [技巧] 编号与反向映射 225
115 [技巧] DFS和BFS 227
116 [实例] 最短路径* 232
117 [实例] 最小生成树 239
118 习题246
第12 章 章 实 验 验 247
121 多维求和 247
122 幻方计数 249
123 随机行走 251
124 纸牌游戏 255
125 迷宫生成 260
VIII 目录
126 数据压缩 261
127 会场安排 263
128 排序测试 264
附 录A 头 文 件 件 269
A1 计时类 269
A2 bookh270
附 录B 中 文 参 考 书 目 目 275
B1 国内数据结构教材275
B2 数据结构教材(翻译版)275
B3 算法教材(翻译版) 276
英 文 参 考 文 献 献 277