标题：数据结构与算法教程（C++版）
图书简介
本书结合C++面向对象程序设计的特点，构建了数据结构与算法，书中的所有算法都在Visual C++ 6.0、Visual C++2005、Visual C++2005 Express、Dev-C++和MinGW Developer Studio开发环境中进行了严格的测试，而且，在作者个人网页上提供了大量的教学支持内容。本书在内容组织上特别考虑了读者的可接受性；在算法实现时，重点考虑了程序的可读性；并且在习题、上机实验或课程设计中进一步实现更强的功能。通过本书学习，读者不但能迅速提高数据结构与算法的水平，还能提高C++程序设计的能力，经过适当的选择，本书可以作为数据结构、数据结构与算法分析、数据结构与算法设计、数据结构与算法等课程的教材，本书可作为高等院校计算机及相关专业的教材，也可供其他从事软件开发工作的读者学习参考使用。 [1]
图书信息
ISBN：9787302280309定价：39元印次：1-1装帧：平装印刷日期：2012-11-15
作者：唐宁九、游洪跃、孙界平、朱宏、杨秋辉
图书前言
希望各位能够抽出宝贵的时间将你对本教材的建议或意见，当然也可以发表对国内外的数据结构与算法课程教学的任何意见寄给作者，你的意见将是我们再版修订教材的重要参考。
张卫华、彭骏、谭斌、李培宇、何凯霖、姜琳、聂清彬、黄维、邹昌文、王文昌、周焯华、胡开文、沈洁、周德华与欧阳等人对本书做了大量的工作，包括提供资料，调试算法，参与了部分内容的编写，在此特向他们表示感谢；作者还要感谢为本书提供直接或间接帮助的每一个朋友，由于你们热情的帮助或鼓励，激发了作者写好本书的信心以及写作热情。
本书的出版要感谢清华大学出版社各位编辑及评审专家，由于他们为本书的出版倾注了大量热情，也由于他们具有前瞻性的眼光才让读者有机会看到本书。
尽管作者有良好而负责任的严格态度，并做出了最大努力，但由于作者水平有限，书中难免有不妥之处，因此，敬请各位读者不吝赐教，以便作者有一个提高的机会，并在再版时尽量采用你们的意见。
图书目录
第1章 绪论1
1.1 数据结构的概念和学习数据结构的必要性1
1.2 数据结构的基本概念2
1.2.1 数据2
1.2.2 数据元素和数据项2
1.2.3 数据结构2
1.3 抽象数据类型及其实现4
1.3.1 数据类型4
1.3.2 抽象数据类型(Abstract Data Type--ADT)4
1.3.3 C++的类和对象4
1.3.4 运算符重载6
1.3.5 有关C++的动态存储分配9
1.3.6 C++的模板（template) 10
1.4 算法和算法分析11
1.4.1 算法11
1.4.2 算法分析12
??1.5 实用程序软件包15
1.6 深入学习导读19
1.7 习题119
第2章 线性表21
2.1 线性表的逻辑结构21
2.2 线性表的顺序存储结构23
2.3 线性表的链式存储结构31
2.3.1 单链表31
2.3.2 循环链表39
2.3.3 双向链表43
??2.3.4 在链表结构中保存当前位置和元素个数46
??2.4 实例研究: 一元多项式的表示55
2.5 深入学习导读60
2.6 习题260
第3章 栈和队列61
3.1 栈61
3.1.1 栈的基本概念61
3.1.2 顺序栈62
3.1.3 链式栈67
3.2 队列74
3.2.1 队列的基本概念74
3.2.2 链队列75
3.2.3 循环队列--队列的顺序存储结构79
??3.2.4 队列应用--显示二项式(a+b)?i的系数84
??3.3 实例研究: 表达式求值85
3.4 深入学习导读88
3.5 习题389
第4章 串90
4.1 串类型的定义90
4.2 字符串的实现91
4.3 字符串模式匹配算法98
4.3.1 简单字符串模式匹配算法98
???4.3.2 KMP字符串模式匹配算法99
???4.4 实例研究: 文本编辑104
4.5 深入学习导读114
4.6 习题4114
第5章 数组和广义表115
5.1 数组115
5.1.1 数组的基本概念115
5.1.2 数组的顺序表116
???5.1.3 数组的类定义118
5.2 矩阵122
5.2.1 矩阵的定义和操作122
5.2.2 特殊矩阵123
5.2.3 稀疏矩阵128
5.3 广义表139
5.3.1 基本概念139
??5.3.2 广义表的存储结构141
5.4 深入学习导读151
5.5 习题5152
第6章 树和二叉树153
6.1 树的基本概念153
6.1.1 树的定义153
6.1.2 基本术语154
6.2 二叉树155
6.2.1 二叉树的定义155
6.2.2 二叉树的性质157
6.2.3 二叉树的存储结构160
6.3 二叉树遍历168
6.3.1 遍历的定义168
6.3.2 遍历算法169
??6.3.3 二叉树遍历应用举例175
6.4 线索二叉树180
6.4.1 线索的概念180
??6.4.2 线索二叉树的实现182
6.5 树和森林190
6.5.1 树的存储表示190
??6.5.2 树的显示198
6.5.3 森林的存储表示198
6.5.4 树和森林的遍历203
6.5.5 树和森林与二叉树的转换206
6.6 哈夫曼树与哈夫曼编码208
6.6.1 哈夫曼树的基本概念209
6.6.2 哈夫曼树构造算法210
6.6.3 哈夫曼编码210
??6.6.4 哈夫曼树的实现212
???6.7 树的计数216
???6.8 实例研究: 树与等价关系218
6.9 深入学习导读222
6.10 习题6222
第7章 图224
7.1 图的定义和术语224
7.2 图的存储表示228
7.2.1 邻接矩阵228
7.2.2 邻接表234
7.3 图的遍历242
7.3.1 深度优先搜索242
7.3.2 广度优先搜索244
7.4 连通无向网的最小代价生成树246
7.4.1 Prim算法246
7.4.2 Kruskal算法249
7.5 有向无环图及应用252
7.5.1 拓扑排序253
7.5.2 关键路径256
7.6 最短路径260
7.6.1 单源点最短路径问题260
7.6.2 所有顶点之间的最短路径263
7.7 深入学习导读265
7.8 习题7265
第8章 查找267
8.1 查找的基本概念267
8.2 静态表的查找270
8.2.1 顺序查找270
8.2.2 有序表的查找271
8.3 动态查找表274
8.3.1 二叉排序树274
??8.3.2 二叉平衡树285
??8.3.3 B-树和B?+-树310
8.4 散列表312
8.4.1 散列表的概念312
8.4.2 构造散列函数的方法313
8.4.3 处理冲突的方法313
??8.4.4 散列表的实现315
8.5 深入学习导读320
8.6 习题8320
第9章 排序321
9.1 概述321
9.2 插入排序322
9.2.1 直接插入排序322
9.2.2 Shell排序324
9.3 交换排序325
9.3.1 起泡排序325
9.3.2 快速排序326
9.4 选择排序329
9.4.1 简单选择排序330
9.4.2 堆排序331
9.5 归并排序334
??9.6 基数排序338
9.6.1 多关键排序338
9.6.2 基数排序339
??9.7 各种内部排序方法讨论341
??9.8 外部排序342
9.8.1 外部排序基础342
9.8.2 外部排序的方法343
??9.9 实例研究: 各种排序算法运行时间测试344
9.10 深入学习导读347
9.11 习题9347
?*第10章 文件349
10.1 主存储器和辅助存储器349
10.2 各种常用文件结构349
10.2.1 顺序文件349
10.2.2 索引文件350
10.2.3 散列文件351
10.2.4 VSAM文件351
10.2.5 多关键字文件352
10.3 深入学习导读354
10.4 习题10354
第11章 算法设计与分析355
11.1 算法设计355
11.1.1 递归算法355
11.1.2 分治算法357
?*11.1.3 回溯算法358
11.2 算法分析361
11.2.1 递归分析361
?**11.2.2 利用生成函数进行分析362
11.3 深入学习导读363
11.4 习题11364
附录A 调和级数365
附录B 课本的软件包366
附录C 实验题目371
附录D 课程设计项目372D1 算术表达式求值372
D2 简单本文编辑器372
D3 压缩软件373
?**D4 公园导游系统373
?*D5 专家系统应用--动物游戏373
?*D6 词典变位词检索系统374
附录E 实验报告格式375
附录F 课程设计报告格式376
参考文献377
第1章 绪论1
1.1 数据结构的概念和学习数据结构的必要性1
1.2 数据结构的基本概念2
1.2.1 数据2
1.2.2 数据元素和数据项2
1.2.3 数据结构2
1.3 抽象数据类型及其实现4
1.3.1 数据类型4
1.3.2 抽象数据类型(Abstract Data Type--ADT)4
1.3.3 C++的类和对象4
1.3.4 运算符重载6
1.3.5 有关C++的动态存储分配9
1.3.6 C++的模板（template) 10
1.4 算法和算法分析11
1.4.1 算法11
1.4.2 算法分析12
??1.5 实用程序软件包15
1.6 深入学习导读19
1.7 习题119
第2章 线性表21
2.1 线性表的逻辑结构21
2.2 线性表的顺序存储结构23
2.3 线性表的链式存储结构31
2.3.1 单链表31
2.3.2 循环链表39
2.3.3 双向链表43
??2.3.4 在链表结构中保存当前位置和元素个数46
??2.4 实例研究: 一元多项式的表示54
2.5 深入学习导读59
2.6 习题260
第3章 栈和队列61
3.1 栈61
3.1.1 栈的基本概念61
3.1.2 顺序栈62
3.1.3 链式栈67
3.2 队列73
3.2.1 队列的基本概念73
3.2.2 链队列75
3.2.3 循环队列--队列的顺序存储结构79
??3.2.4 队列应用--显示二项式(a+b)?i的系数84
??3.3 实例研究: 表达式求值85
3.4 深入学习导读88
3.5 习题388
第4章 串89
4.1 串类型的定义89
4.2 字符串的实现90
4.3 字符串模式匹配算法97
4.3.1 简单字符串模式匹配算法97
???4.3.2 KMP字符串模式匹配算法98
???4.4 实例研究: 文本编辑103
4.5 深入学习导读113
4.6 习题4113
第5章 数组和广义表114
5.1 数组114
5.1.1 数组的基本概念114
5.1.2 数组的顺序表115
???5.1.3 数组的类定义117
5.2 矩阵121
5.2.1 矩阵的定义和操作121
5.2.2 特殊矩阵122
5.2.3 稀疏矩阵127
5.3 广义表138
5.3.1 基本概念138
??5.3.2 广义表的存储结构140
5.5 深入学习导读150
5.6 习题5151
第6章 树和二叉树152
6.1 树的基本概念152
6.1.1 树的定义152
6.1.2 基本术语153
6.2 二叉树154
6.2.1 二叉树的定义154
6.2.2 二叉树的性质156
6.2.3 二叉树的存储结构159
6.3 二叉树遍历166
6.3.1 遍历的定义167
6.3.2 遍历算法168
??6.3.3 二叉树遍历应用举例174
6.4 线索二叉树179
6.4.1 线索的概念179
??6.4.2 线索二叉树的实现181
6.5 树和森林188
6.5.1 树的存储表示188
??6.5.2 树的显示196
6.5.3 森林的存储表示197
6.5.4 树和森林的遍历201
6.5.5 树和森林与二叉树的转换204
6.6 哈夫曼树与哈夫曼编码206
6.6.1 哈夫曼树的基本概念207
6.6.2 哈夫曼树构造算法208
6.6.3 哈夫曼编码208
??6.6.4 哈夫曼树的实现210
???6.7 树的计数213
???6.8 实例研究: 树与等价关系216
6.9 深入学习导读220
6.10 习题6220
第7章 图222
7.1 图的定义和述语222
7.2 图的存储表示226
7.2.1 邻接矩阵226
7.2.2 邻接表232
7.3 图的遍历240
7.3.1 深度优先搜索240
7.3.2 广度优先搜索242
7.4 图的最小代价生成树244
7.4.1 Prim算法244
7.4.2 Kruskal算法247
7.5 有向无环图及应用250
7.5.1 拓扑排序251
7.5.2 关键路径253
7.6 最短路径258
7.6.1 单源点最短路径问题258
7.6.2 所有顶点之间的最短路径261
7.8 深入学习导读263
7.9 习题7263
第8章 查找265
8.1 查找的基本概念265
8.2 静态表的查找268
8.2.1 顺序查找268
8.2.2 有序表的查找269
8.3 动态查找表272
8.3.1 二叉排序树272
??8.3.2 二叉平衡树283
??8.3.3 B-树和B?+-树307
8.4 散列表310
8.4.1 散列表的概念310
8.4.2 构造散列函数的方法310
8.4.3 处理冲突的方法311
??8.4.4 散列表的实现312
8.5 深入学习导读317
8.6 习题8318
第9章 排序319
9.1 概述319
9.2 插入排序320
9.2.1 直接插入排序320
9.2.1 Shell排序322
9.3 交换排序323
9.3.1 起泡排序323
9.3.2 快速排序324
9.4 选择排序327
9.4.1 简单选择排序328
9.4.2 堆排序329
9.5 归并排序332
?*9.6 基数排序336
9.6.1 多关键排序336
9.6.2 基数排序337
?*9.7 各种内部排序方法讨论339
?*9.8 外部排序340
9.8.1 外部排序基础340
9.8.2 外部排序的方法341
?*9.9 实例研究: 各种排序算法运行时间测试342
9.10 深入学习导读345
9.11 习题9345
?*第10章 文件347
10.1 主存储器和辅助存储器347
10.2 各种常用文件结构347
10.2.1 顺序文件347
10.2.2 索引文件348
10.2.3 散列文件349
10.2.4 VSAM文件349
10.2.5 多关键字文件350
10.3 深入学习导读352
10.4 习题10352
第11章 算法设计与分析353
11.1 算法设计353
11.1.1 递归算法353
11.1.2 分治算法355
?*11.1.3 回溯算法356
11.2 算法分析359
11.2.1 递归分析359
?**11.2.2 利用生成函数进行分析360
11.4 深入学习导读361
11.5 习题11362附录A 调和级数363附录B 课本的软件包364附录C 实验课目369附录D 课程设计项目370D.1 算术表达式求值370
D.2 简单本文编辑器370
D.3 压缩软件371
?**D.4 公园导游系统371
?*D.5 专家系统应用--动物游戏371
?*D.6 词典变位词检索系统372附录E 实验报告格式373附录F 课程设计报告格式374参考文献375[1]