第1章 绪论 1
1.1 数据与数据类型 1
1.1.1 数据的基本概念 1
1.1.2 数据项与数据元素 2
1.1.3 数据类型与抽象数据类型 3
1.2 数据逻辑与存储结构 7
1.2.1 数据逻辑结构 7
1.2.2 数据存储结构 8
1.3 数据运算与算法 10
1.3.1 数据运算 10
1.3.2 算法及其基本要求 11
1.3.3 算法设计与分析 12
1.4 “数据结构”课程的地位与教材内容 15
1.4.1 “数据结构”课程的地位 15
1.4.2 本书内容组织 16
本章小结 17
第2章 线性表 21
2.1 线性表概念 21
2.1.1 线性表逻辑结构 21
2.1.2 线性表ADT描述 22
2.2 线性表的顺序存储 24
2.2.1 顺序存储结构 24
2.2.2 顺序表的基本操作 26
2.3 线性表的链式存储 31
2.3.1 单链表概念 31
2.3.2 单链表的基本操作 34
2.3.3 线性表存储结构比较 40
2.4 链式存储其他实现方式 41
2.4.1 循环链表 41
2.4.2 双向链表 43
2.4.3 静态链表 46
2.5 单链表应用及迭代器 47
2.5.1 单链表倒置 47
2.5.2 两个有序链表合并 48
2.5.3 一元多项式计算 49
2.5.4 迭代器 52
本章小结 54
第3章 栈和队列 57
3.1 栈 57
3.1.1 栈基本概念 57
3.1.2 栈的顺序存储 59
3.1.3 栈的链式存储 62
3.2 栈的应用 65
3.2.1 数制转换 65
3.2.2 栈在递归中的应用 66
3.2.3 栈在括号匹配中的应用 74
3.2.4 表达式求值 76
3.2.5 迷宫求解 80
3.3 队列 84
3.3.1 队列基本概念 84
3.3.2 队列的顺序存储 86
3.3.3 队列的链式存储 91
3.4 队列的应用 94
本章小结 98
第4章 数组和串 101
4.1 数组 101
4.1.1 二维数组 101
4.1.2 矩阵的顺序表示与实现 102
4.1.3 特殊矩阵的压缩存储 103
4.1.4 稀疏矩阵的压缩存储 107
4.2 串 114
4.2.1 串及相关概念 115
4.2.2 串的基本操作 115
4.2.3 串的顺序存储 117
4.2.4 串的链式存储 121
4.2.5 串的模式匹配 122
本章小结 129
第5章 树 131
5.1 树结构及相关概念 131
5.1.1 树的基本概念 132
5.1.2 树的相关概念 135
5.2 树的存储 136
5.2.1 父结点表示法存储 136
5.2.2 子结点表示法存储 137
5.2.3 左子/右兄弟结点表示法存储 140
5.3 树的遍历 141
5.3.1 广度优先遍历 141
5.3.2 深度优先遍历 143
本章小结 145
第6章 二叉树及应用 147
6.1 二叉树的概念及性质 147
6.1.1 二叉树及其相关概念 147
6.1.2 二叉树的基本性质 151
6.2 二叉树的存储 152
6.2.1 二叉树的顺序存储 152
6.2.2 二叉树的链式存储 153
6.3 二叉树的遍历 157
6.3.1 先序遍历、中序遍历与后序遍历 157
6.3.2 基于递归遍历算法 158
6.3.3 基于非递归遍历算法 161
6.4 线索二叉树 167
6.4.1 线索与线索二叉树 167
6.4.2 线索二叉树创建 169
6.4.3 线索二叉树操作 170
6.5 Huffman树及其应用 171
6.5.1 编码及分类 172
6.5.2 Huffman树 172
6.5.3 基于顺序存储Huffman树 174
6.5.4 Huffman编码 177
6.6 树与二叉树的转换 180
6.6.1 树转换为二叉树 180
6.6.2 二叉树还原为树 181
6.6.3 森林与二叉树的转换 182
本章小结 183
第7章 图 185
7.1 图的数据结构 185
7.1.1 图的基本概念 185
7.1.2 路径与连通 188
7.2 图的存储 190
7.2.1 基于邻接矩阵存储 190
7.2.2 基于邻接表存储 193
7.3 图的遍历 197
7.3.1 深度优先遍历 197
7.3.2 广度优先遍历 199
7.4 生成树与最小生成树 202
7.4.1 图的生成树 202
7.4.2 无向连通图最小生成树 204
7.5 有向网图的应用 214
7.6 有向无环图的应用 220
7.6.1 AOV网与拓扑排序 221
7.6.2 AOE网与关键路径 224
本章小结 231
第8章 查找 234
8.1 数据查找 234
8.2 基于线性表的查找 236
8.2.1 顺序查找 237
8.2.2 分块查找 238
8.2.3 二分查找 240
8.3 基于二叉树的查找 244
8.3.1 二叉查找树概念 244
8.3.2 基于二叉查找树的查找 245
8.3.3 二叉查找树插入与生成算法 247
8.3.4 二叉查找树删除 249
8.3.5 平衡二叉树 253
8.4 基于散列表的查找 257
8.4.1 常用散列函数构建 258
8.4.2 散列冲突处理 260
本章小结 265
第9章 排序 267
9.1 数据排序 267
9.1.1 排序的基本概念 267
9.1.2 排序算法性能分析 270
9.2 插入排序 271
9.2.1 直接插入排序 271
9.2.2 二分插入排序 275
9.2.3 Shell排序 277
9.3 交换排序 279
9.3.1 冒泡排序 279
9.3.2 快速排序 281
9.4 选择排序 285
9.4.1 直接选择排序 285
9.4.2 堆排序 287
9.5 归并排序 293
9.6 外排序 295
9.6.1 外排序的基本步骤 296
9.6.2 败者树k-路归并算法 297
9.6.3 k-路归并算法实现 298
本章小结 299
第10章 文件 304
10.1 文件及其分类 304
10.1.1 文件概述 304
10.1.2 文件结构与操作 305
10.2 顺序文件 308
10.2.1 顺序文件存储结构 308
10.2.2 顺序存储的实现 308
10.3 索引文件 309
10.3.1 索引表与索引文件 309
10.3.2 ISAM文件 311
10.3.3 VSAM文件 313
10.4 动态索引B-树 314
10.4.1 B-树 315
10.4.2 B+树 321
10.5 散列文件 322
10.6 多关键码文件 324
10.6.1 多重表文件 325
10.6.2 倒排文件 326
本章小结 326
参考文献 329