《数据结构实用教程(第二版)》是清华大学出版社2015年出版的图书,作者徐孝凯
本书是为全国高等院校计算机及相关专业开设数据结构课程而精心组织和编著的一本实用教材。它从1999年出版以来,一直深受广大读者和专家的好评,相继被许多高校选定为教科书和考研参考书,并被列选为国家级“十一五”规划教材。这次对本书进行了认真和全面的修订,形成第2版,相信会得到更广泛的认可,对数据结构学科的教学和发展产生积极的影响。
本书从计算机学科发展和应用的实际需要出发,对各种常用的数据结构,从逻辑结构、存储结构、运算种类、运算方法和算法等各个方面进行了深入细致的解剖和分析,使读者更容易理解基本概念和知识,能够轻松地进行算法设计和上机操作的训练,大大提高软件开发与设计的专业能力。
另外,与本书配套的习题参考解答也一并被修订和出版,为广大自学读者提供方便。
目录
- 第1章 绪论 1
- 1.1 常用术语 1
- 1.2 算法描述 11
- 1.3 算法评价 13
- *1.4 与算法描述有关的C++知识 19
- 1.4.1 包含文件语句 20
- 1.4.2 数据类型 28
- 1.4.3 函数 36
- 1.4.4 运算符重载 41
- 习题1 43
- 第2章 线性表 48
- 2.1 线性表的定义和抽象数据类型 48
- 2.1.1 线性表的定义 48
- 2.1.2 线性表的抽象数据类型 49
- 2.1.3 操作举例 50
- 2.2 线性表的顺序存储和操作实现 51
- 2.2.1 线性表的顺序存储结构 51
- 2.2.2 顺序存储下的线性表操作的实现 53
- *2.3 线性表应用举例 62
- 2.4 线性表的链接存储结构 67
- 2.5 线性表操作在单链表上的实现 75
- *2.6 多项式计算 83
- 2.6.1 多项式表示与求值 83
- 2.6.2 两个多项式相加 88
- 习题2 91
- 第3章 集合、稀疏矩阵和广义表 94
- 3.1 集合的定义和抽象数据类型 94
- 3.1.1 集合定义 94
- 3.1.2 集合的抽象数据类型 94
- 3.2 集合的顺序存储结构和操作实现 95
- 3.3 集合的链接存储结构和操作实现 102
- 3.4 稀疏矩阵 108
- 3.4.1 稀疏矩阵的定义 108
- 3.4.2 稀疏矩阵的存储结构 110
- *3.4.3 稀疏矩阵的运算 113
- 3.5 广义表 120
- 3.5.1 广义表的定义 120
- 3.5.2 广义表的存储结构 122
- 3.5.3 广义表的运算 123
- 3.5.4 简单程序举例 127
- 习题3 128
- 第4章 栈和队列 131
- 4.1 栈 131
- 4.1.1 栈的定义 131
- 4.1.2 栈的抽象数据类型 131
- 4.2 栈的顺序存储结构和操作实现 132
- 4.3 栈的链接存储结构和操作实现 136
- 4.4 栈的简单应用举例 138
- 4.5 算术表达式的计算 142
- 4.5.1 算术表达式的两种表示 142
- 4.5.2 后缀表达式求值的算法 144
- 4.5.3 把中缀表达式转换为后缀表达式的算法 146
- 4.6 栈与递归 150
- 4.7 队列 160
- 4.7.1 队列的定义 160
- 4.7.2 队列的抽象数据类型 161
- 4.7.3 队列的顺序存储结构和操作实现 162
- 4.7.4 队列的链接存储结构和操作实现 165
- *4.8 队列应用举例 169
- 习题4 173
- 第5章 树 178
- 5.1 树的概念 178
- 5.1.1 树的定义 178
- 5.1.2 树的表示 180
- 5.1.3 树的基本术语 181
- 5.1.4 树的性质 182
- 5.2 二叉树 183
- 5.2.1 二叉树的定义 183
- 5.2.2 二叉树的性质 184
- 5.2.3 二叉树的抽象数据类型 186
- 5.2.4 二叉树的存储结构 187
- 5.3 二叉树遍历 189
- 5.4 二叉树其他运算 193
- 5.5 树的存储结构和运算 198
- 5.5.1 树的抽象数据类型 198
- 5.5.2 树的存储结构 199
- 5.5.3 树的运算 201
- 习题5 207
- 第6章 特殊二叉树 212
- 6.1 二叉搜索树 212
- 6.1.1 二叉搜索树的定义 212
- 6.1.2 二叉搜索树的抽象数据类型 212
- 6.1.3 二叉搜索树的运算 213
- 6.2 堆 220
- 6.2.1 堆的定义 220
- 6.2.2 堆的抽象数据类型 221
- 6.2.3 堆的存储结构 221
- 6.2.4 堆的运算 222
- 6.3 哈夫曼树 227
- 6.3.1 基本术语 227
- 6.3.2 构造哈夫曼树 228
- *6.3.3 哈夫曼编码 231
- *6.4 线索二叉树 234
- 6.4.1 二叉树的线索化 234
- 6.4.2 利用线索进行遍历 238
- *6.5 平衡二叉树 241
- 6.5.1 平衡二叉树的定义 241
- 6.5.2 平衡二叉树的调整 242
- 习题6 247
- 第7章 图 249
- 7.1 图的概念 249
- 7.1.1 图的定义 249
- 7.1.2 图的基本术语 250
- 7.1.3 图的抽象数据类型 253
- 7.2 图的存储结构 254
- 7.2.1 邻接矩阵 254
- 7.2.2 邻接表 257
- 7.2.3 边集数组 262
- 7.3 图的遍历 264
- 7.3.1 深度优先搜索遍历 264
- 7.3.2 广度优先搜索遍历 267
- 7.3.3 非连通图的遍历 269
- 习题7 271
- 第8章 图的应用 273
- 8.1 图的生成树和最小生成树 273
- 8.1.1 生成树和最小生成树的概念 273
- 8.1.2 普里姆算法 275
- 8.1.3 克鲁斯卡尔算法 278
- 8.2 最短路径 281
- 8.2.1 最短路径的概念 281
- 8.2.2 从一顶点到其余各顶点的最短路径 282
- *8.2.3 每对顶点之间的最短路径 286
- 8.3 拓扑排序 290
- 8.3.1 拓扑排序的概念 290
- 8.3.2 拓扑排序算法 293
- *8.4 关键路径 296
- 8.4.1 顶点事件的发生时间 296
- 8.4.2 计算关键路径的方法和算法 299
- 习题8 302
- 第9章 查找 305
- 9.1 查找的概念 305
- 9.2 顺序表查找 306
- 9.2.1 顺序查找 306
- 9.2.2 二分查找 307
- 9.3 索引查找 311
- 9.3.1 索引的概念 311
- 9.3.2 索引查找算法 314
- *9.3.3 分块查找 316
- 9.4 散列查找 317
- 9.4.1 散列的概念 317
- 9.4.2 散列函数 319
- 9.4.3 处理冲突的方法 321
- 9.4.4 散列表的运算 324
- 9.5 B树查找 328
- 9.5.1 B_树定义 328
- 9.5.2 B_树查找 330
- 9.5.3 B_树插入 332
- 9.5.4 B_树删除 335
- *9.5.5 对B_树的其他运算 337
- *9.5.6 B+树简介 340
- 习题9 341
- 第10章 排序 343
- 10.1 排序的基本概念 343
- 10.2 插入排序 344
- 10.2.1 直接插入排序 345
- *10.2.2 希尔排序 346
- 10.3 选择排序 347
- 10.3.1 直接选择排序 347
- 10.3.2 堆排序 348
- 10.4 交换排序 352
- 10.4.1 气泡排序 352
- 10.4.2 快速排序 354
- 10.5 归并排序 357
- *10.6 各种内排序方法的比较 360
- *10.7 外排序 362
- 10.7.1 外排序的概念 362
- 10.7.2 外排序算法 364
- 习题10 371