第1章 绪论 1
1.1 引言 1
1.2 常用术语和基本概念 1
1.3 算法与算法分析 4
1.3.1 算法的重要特性 4
1.3.2 算法设计的基本要求 4
1.3.3 算法的描述方法 5
1.3.4 算法分析 5
小结 6
习题1 7
第2章 线性表 8
2.1 线性表的逻辑结构 8
2.1.1 线性表的定义 8
2.1.2 线性表的抽象数据类型 8
2.2 线性表的顺序存储及实现 10
2.2.1 顺序表 10
2.2.2 顺序表的基本操作 11
2.3 线性表的链式存储及实现 14
2.3.1 单链表 15
2.3.2 单链表的基本运算 16
2.4 顺序表和链表的比较 22
2.4.1 顺序存储结构的优、缺点 22
2.4.2 存储结构的选取 23
2.5 线性表的其他表示形式 24
2.5.1 单循环链表 24
2.5.2 双向链表 25
2.5.3 静态链表 26
2.6 单链表应用举例 27
2.6.1 单链表倒置 27
2.6.2 重复节点的删除 28
2.6.3 单链表的合并 28
2.6.4 一元多项式的表示及相加 29
小结 31
习题2 32
第3章 栈和队列 34
3.1 栈 34
3.1.1 栈的定义及基本操作 34
3.1.2 栈的顺序存储 35
3.1.3 栈的链式存储 37
3.1.4 顺序栈和链栈的比较 39
3.2 队列 39
3.2.1 队列的定义及基本操作 39
3.2.2 队列的顺序存储及基本操作 40
3.2.3 队列的链式存储及基本操作 45
3.3 栈的应用举例 47
3.3.1 栈与递归 47
3.3.2 栈与数制转换 49
3.3.3 栈与迷宫问题 50
3.3.4 栈与表达式求值 54
3.4 队列应用举例 56
3.4.1 键盘输入循环缓冲区问题 56
3.4.2 舞伴配对问题 57
3.4.3 杨辉三角问题 59
小结 61
习题3 62
第4章 串 64
4.1 串及其类型定义 64
4.1. 1 串及其相关术语 64
4.1.2 串的抽象数据类型 65
4.2 串的定长顺序存储 66
4.2.1 串的定长顺序存储结构 66
4.2.2 定长顺序串的基本操作 67
4.2.3 模式匹配 68
4.3 串的堆存储结构 74
4.3.1 堆存储结构 74
4.3.2 堆结构上的基本操作 74
4.4 串的链式存储结构 76
4.5 串的应用举例 77
4.5.1 文本编辑 77
4.5.2 恺撒密码 78
小结 79
习题4 79
第5章 数组与广义表 81
5.1 数组及其操作 81
5.1.1 数组的定义 81
5.1.2 数组的顺序表示及实现 82
5.2 特殊矩阵的压缩存储 85
5.2.1 对称矩阵 85
5.2.2 三角矩阵 86
5.2.3 对角矩阵 87
5.3 稀疏矩阵 88
5.3.1 稀疏矩阵的三元组存储 89
5.3.2 稀疏矩阵的十字链表存储 94
5.4 广义表 97
5.4.1 广义表的定义 97
5.4.2 广义表的存储结构 98
5.4.3 广义表的基本操作 100
小结 103
习题5 103
第6章 树与二叉树 105
6.1 树 105
6.1.1 树的逻辑结构 105
6.1.2 树的存储结构 109
6.2 二叉树定义与性质 111
6.2.1 二叉树的基本概念 111
6.2.2 二叉树的主要性质 112
6.3 二叉树的存储与基本操作实现 113
6.3.1 二叉树的存储 113
6.3.2 二叉树的基本操作与实现 117
6.4 二叉树的遍历 119
6.4.1 二叉树的遍历方法及算法实现 119
6.4.2 从遍历序列推导二叉树 124
6.5 线索二叉树 125
6.5.1 线索二叉树的定义及结构 125
6.5.2 线索二叉树的基本操作及算法实现 127
6.6 树、森林与二叉树的转换 132
6.6.1 树转换为二叉树 132
6.6.2 森林转换为二叉树 133
6.6.3 二叉树转换为树或森林 134
6.7 二叉树遍历算法的应用 134
6.7.1 查找数据元素 134
6.7.2 显示二叉树 135
6.7.3 统计叶子节点数目 135
6.7.4 求二叉树深度 135
6.7.5 创建二叉树 136
6.8 最优二叉树——哈夫曼树 137
6.8.1 哈夫曼树的基本概念 137
6.8.2 哈夫曼树的构造算法 138
6.8.3 哈夫曼编码 140
小结 143
习题6 143
第7章 图 147
7.1 图的逻辑结构 147
7.1.1 图的定义和基本术语 147
7.1.2 图的抽象数据类型 151
7.2 图的存储结构 152
7.2.1 邻接矩阵 152
7.2.2 邻接表 154
7.2.3 十字链表 157
7.2.4 图的存储结构的比较 159
7.3 图的遍历 159
7.3.1 深度优先搜索 160
7.3.2 广度优先搜索 161
7.4 图与最小生成树 163
7.4.1 生成树和生成森林 163
7.4.2 最小生成树 165
7.4.3 Prim算法生成最小生成树 166
7.4.4 Kruskal算法生成最小生成树 168
7.5 AOV网与拓扑排序 170
7.5.1 有向无环图 170
7.5.2 AOV网 171
7.5.3 拓扑排序 172
7.6 AOE网与关键路径 175
7.6.1 AOE网 175
7.6.2 关键路径 176
7.7 图与最短路径 181
7.7.1 从一个源点到其余各顶点的最短路径 181
7.7.2 任意一对顶点之间的最短路径 184
小结 186
习题7 187
第8章 查找 191
8.1 静态查找表 191
8.1.1 顺序表查找 191
8.1.2 有序顺序表查找——折半查找 192
8.1.3 有序顺序表查找——斐波那契查找 193
8.1.4 有序链表查找——跳跃表 195
8.1.5 索引顺序表的查找 196
8.2 动态查找表 198
8.2.1 二叉排序树和平衡二叉树 198
8.2.2 B-树和B+树 204
8.2.3 红黑树 208
8.3 哈希表 209
8.3.1 什么是哈希表 209
8.3.2 哈希函数的构造方法 210
8.3.3 处理冲突的方法 211
8.3.4 哈希表的查找及性能分析 213
小结 214
习题8 214
第9章 内部排序 217
9.1 排序的基本概念 217
9.2 插入排序 218
9.2.1 直接插入排序 219
9.2.2 折半插入排序 220
9.2.3 二路插入排序 221
9.2.4 表插入排序 223
9.2.5 希尔排序 223
9.3 交换排序 225
9.3.1 冒泡排序 225
9.3.2 快速排序 228
9.4 选择排序 231
9.4.1 简单选择排序 231
9.4.2 树形选择排序 232
9.4.3 堆排序 233
9.5 归并排序 237
9.6 基数排序 240
9.6.1 多关键字排序 240
9.6.2 链式基数排序 240
9.7 各种内部排序方法的比较 242
小结 243
习题9 243
附录 实验安排 245
实验一 线性表的顺序存储结构 245
实验二 线性表的链式存储结构 245
实验三 循环链表的操作 246
实验四 顺序栈的实现 246
实验五 循环队列的实现 247
实验六 串的模式匹配 247
实验七 二叉树的建立与遍历 248
实验八 线索二叉树的创建及遍历 248
实验九 哈夫曼编译码 249
实验十 图的建立与遍历 250
实验十一 最小生成树 250
实验十二 关键路径 251
实验十三 最短路径 251
实验十四 查找 252
实验十五 排序 252
参考文献 254