第1章 数据结构概述 1
1.1 基本概念 1
1.1.1 数据、数据元素和数据对象 1
1.1.2 数据结构 2
1.2 数据结构的分类 3
1.3 数据类型 5
1.3.1 基本类型和组合类型 5
1.3.2 抽象数据类型 5
1.4 算法和算法分析 8
1.4.1 算法概念 8
1.4.2 算法分析 10
习题 12
第2章 向量、栈和队列 14
2.1 线性表 14
2.1.1 线性表的抽象数据类型 14
2.1.2 线性表的结构表示 16
2.2 向量 19
2.2.1 向量的抽象数据类型 19
2.2.2 向量的插入和删除 22
2.2.3 向量的应用 24
2.3 栈 28
2.3.1 栈的抽象数据类型及其实现 28
2.3.2 栈的应用 31
2.4 递归效率分析 39
2.4.1 递归方程求解 39
2.4.2 生成函数求解递归方程 40
2.4.3 特征方程求解递归方程 41
2.4.4 递归树方法 42
2.5 队列 44
2.5.1 队列的抽象数据类型及其实现 44
2.5.2 队列的应用:模拟银行活动 50
习题 58
第3章 链表 60
3.1 单链表 60
3.1.1 基本概念 60
3.1.2 单链表结点结构 61
3.1.3 单链表结构 63
3.1.4 栈的单链表实现 74
3.1.5 队列的单链表实现 76
3.1.6 单链表的应用举例 77
3.2 循环链表 82
3.3 双链表 84
习题 87
第4章 串 90
4.1 基本概念 90
4.2 串的存储 91
4.3 串结构和串的运算 92
4.4 模式匹配 94
4.4.1 朴素的模式匹配算法 94
4.4.2 KMP匹配算法 95
4.4.3 BM匹配算法 99
习题 101
第5章 排序 102
5.1 基本概念 102
5.2 插入排序 103
5.2.1 直接插入排序 103
5.2.2 折半插入排序 105
5.2.3 Shell排序 107
5.3 选择排序 109
5.3.1 直接选择排序 109
5.3.2 树形选择排序 110
5.4 交换排序 111
5.4.1 起泡排序 111
5.4.2 快速排序 113
5.5 分配排序 116
5.5.1 基本思想 116
5.5.2 基数排序 117
5.6 归并排序 120
5.7 外部排序 122
5.7.1 二路合并排序 123
5.7.2 多路替代选择合并排序 124
5.7.3 最佳合并排序 125
习题 126
第6章 查找 128
6.1 基本概念 128
6.2 顺序查找 128
6.3 折半查找 129
6.4 分块查找 131
6.5 散列查找 133
6.5.1 概述 133
6.5.2 散列函数 134
6.5.3 冲突的处理 137
6.5.4 散列查找的效率 140
习题 141
第7章 树和二叉树 144
7.1 树的概念 144
7.2 二叉树 145
7.2.1 二叉树的概念 145
7.2.2 二叉树的性质 146
7.2.3 二叉树的存储方式 148
7.2.4 树(树林)与二叉树的相互转换 150
7.3 树(树林)和二叉树的遍历 151
7.3.1 树(树林)的遍历 151
7.3.2 二叉树的遍历 152
7.4 抽象数据类型BinaryTree以及BinaryTree结构 153
7.4.1 抽象数据类型BinaryTree 153
7.4.2 一个完整的包含构建二叉树与遍历实现的例子 155
7.5 二叉树的遍历算法 156
7.5.1 非递归(使用栈)的遍历算法 156
7.5.2 线索化二叉树的遍历 158
习题 162
第8章 树形结构的应用 165
8.1 二叉排序树 165
8.1.1 二叉排序树与BinarySTree结构 165
8.1.2 二叉排序树的检索、插入和删除运算 166
8.1.3 等概率查找对应的最佳二叉排序树 170
8.2 平衡的二叉排序树 173
8.2.1 平衡的二叉排序树 173
8.2.2 平衡的二叉排序树的插入和删除 174
8.2.3 AVL树高度 177
8.3 B-树和B+-树 177
8.4 键树和2-3树 182
8.4.1 键树 182
8.4.2 2-3树 183
8.5 Huffman最优树 185
8.5.1 Huffman最优树 185
8.5.2 树编码 189
8.6 堆排序 190
8.7 判定树 197
习题 198
第9章 图 199
9.1 基本概念 199
9.2 图的存储表示 201
9.2.1 相邻矩阵表示图 201
9.2.2 图的邻接表表示 203
9.2.3 邻接多重表 204
9.3 基于邻接表表示的Graph结构 205
9.4 图的遍历 206
9.4.1 深度优先遍历 206
9.4.2 广度优先遍历 209
9.5 最小代价生成树 210
9.6 单源最短路径问题 215
9.7 每对顶点间的最短路径问题 218
9.8 有向无回路图 220
9.8.1 DAG图以及AOV和AOE网 220
9.8.2 AOV网的拓扑排序 222
9.8.3 AOE网的关键路径 224
习题 226
第10章 算法设计与分析 228
10.1 递归与分治 228
10.1.1 递归方法设计 228
10.1.2 分治法 229
10.2 回溯法 231
10.3 分支限界法 238
10.4 贪心算法 244
10.5 动态规划法 246
习题 249
参考文献 252
图索引 253
算法索引 258
关键字索引 261