目录
第1章绪论1
1.1数据结构的概念和学习数据结构的必要性1
1.2数据结构的基本概念2
1.2.1数据2
1.2.2数据元素和数据项2
1.2.3数据结构3
1.3抽象数据类型及其实现4
1.3.1数据类型4
1.3.2抽象数据类型4
1.4算法和算法分析4
1.4.1算法4
1.4.2算法分析5
1.5实例研究: 生命游戏7
1.6深入学习导读13
1.7习题13
第2章线性表14
2.1线性表的逻辑结构14
2.2线性表的顺序存储结构16
2.3线性表的链式存储结构23
2.3.1单链表23
2.3.2循环链表32
2.3.3双向链表35
2.3.4在链表结构中保存当前位置和元素个数39
2.4实例研究: 计算任意大整数的阶乘42
2.5深入学习导读45
2.6习题45
第3章栈和队列46
3.1栈46
3.1.1栈的基本概念46
3.1.2顺序栈47
3.1.3链式栈52
3.2队列59
3.2.1队列的基本概念59
3.2.2链队列60
3.2.3循环队列——队列的顺序存储结构65
3.2.4队列应用——显示二项式(a+b)i的系数70
3.3优先队列71
3.4实例研究: 表达式求值75
3.5深入学习导读79
3.6习题79
第4章串80
4.1串类型的定义80
4.2字符串的实现81
4.3字符串模式匹配算法86
4.3.1简单字符串模式匹配算法86
4.3.2首尾字符串模式匹配算法88
4.3.3KMP字符串模式匹配算法88
4.4实例研究: 文本编辑94
4.5深入学习导读103
4.6习题103
第5章数组和广义表105
5.1数组105
5.1.1数组的基本概念105
5.1.2数组的顺序表105
5.1.3数组的类模板定义107
5.2矩阵111
5.2.1矩阵的定义和操作111
5.2.2特殊矩阵113
5.2.3稀疏矩阵118
5.3广义表130
5.3.1基本概念130
5.3.2广义表的存储结构132
5.4实例研究: 稳定伴侣问题142
5.5深入学习导读145
5.6习题146
第6章树和二叉树147
6.1树的基本概念147
6.1.1树的定义147
6.1.2基本术语147
6.2二叉树149
6.2.1二叉树的定义149
6.2.2二叉树的性质151
6.2.3二叉树的存储结构153
6.3二叉树遍历162
6.3.1遍历的定义162
6.3.2遍历算法163
6.3.3二叉树遍历应用举例169
6.4线索二叉树174
6.4.1线索的概念174
6.4.2线索二叉树的实现176
6.5树和森林的实现184
6.5.1树的存储表示184
6.5.2树的显示191
6.5.3森林的存储表示192
6.5.4树和森林的遍历197
6.5.5将树和森林与二叉树相互转换199
6.6哈夫曼树与哈夫曼编码202
6.6.1哈夫曼树的基本概念202
6.6.2哈夫曼树构造算法203
6.6.3哈夫曼编码204
6.6.4哈夫曼树的实现205
6.7树的计数209
6.8树在等价关系上的应用212
6.9实例研究: 哈夫曼压缩算法216
6.10深入学习导读221
6.11习题222
第7章图223
7.1图的定义和术语223
7.2图的存储表示227
7.2.1邻接矩阵227
7.2.2邻接表232
7.3图的遍历240
7.3.1深度优先搜索240
7.3.2广度优先搜索242
7.4连通无向网的最小代价生成树244
7.4.1Prim算法244
7.4.2Kruskal算法247
7.5有向无环图及应用250
7.5.1拓扑排序251
7.5.2关键路径253
7.6最短路径257
7.6.1单源点最短路径问题258
7.6.2所有顶点之间的最短路径261
7.7实例研究: 周游世界问题——哈密顿圈263
7.8深入学习导读265
7.9习题265
第8章查找267
8.1查找的基本概念267
8.2静态表的查找267
8.2.1顺序查找267
8.2.2有序表的查找268
8.3动态查找表272
8.3.1二叉排序树272
8.3.2平衡二叉树282
8.3.3B树和B+树306
8.4哈希表309
8.4.1哈希表的概念309
8.4.2构造哈希函数的方法309
8.4.3处理冲突的方法309
8.4.4哈希表的实现311
8.5实例研究: 查找3个数组的最小共同元素316
8.6深入学习导读317
8.7习题317
第9章排序319
9.1概述319
9.2插入排序320
9.2.1直接插入排序320
9.2.2Shell排序321
9.3交换排序323
9.3.1冒泡排序323
9.3.2快速排序324
9.4选择排序327
9.4.1简单选择排序327
9.4.2堆排序328
9.5归并排序332
9.6基数排序336
9.6.1多关键字排序336
9.6.2基数排序337
9.7各种内部排序方法讨论339
9.8外部排序341
9.8.1外部排序基础341
9.8.2外部排序的方法342
9.9实例研究: 用堆实现优先队列343
9.10深入学习导读346
9.11习题346
第10章文件348
10.1主存储器和辅助存储器348
10.2各种常用文件结构348
10.2.1顺序文件348
10.2.2索引文件349
10.2.3哈希文件350
10.3实例研究350
10.3.1VSAM文件350
10.3.2多关键字文件351
10.4深入学习导读353
10.5习题353
第11章算法设计与分析354
11.1算法设计354
11.1.1递归算法354
11.1.2分治算法356
11.1.3动态规划算法357
11.1.4贪婪算法358
11.1.5回溯法359
11.1.6分支限界法361
11.2算法分析363
11.2.1递归分析363
11.2.2利用生成函数进行分析364
11.3实例研究: 图着色问题366
11.4深入学习导读368
11.5习题368
参考文献370
附录A调和级数371
附录B泊松分布372
附录C配套软件包文件索引373
附录D主流C++开发环境的使用方法379