第1章 绪论 1
1.1 什么是数据结构 1
1.1.1 数据结构的定义 1
1.1.2 学习数据结构的意义 4
1.2 基本概念和术语 5
1.2.1 数据与数据元素 5
1.2.2 数据的逻辑结构与存储结构 5
1.2.3 数据运算 6
1.2.4 数据类型与抽象数据类型 7
1.3 算法和算法描述语言 8
1.4 算法分析 9
1.4.1 算法评价 9
1.4.2 算法性能分析与度量 13
本章小结 18
习题 18
第2章 线性表 22
2.1 线性表的逻辑结构 22
2.1.1 线性表的定义 22
2.1.2 线性表的基本操作 23
2.2 线性表的顺序存储及运算实现 24
2.2.1 顺序表 24
2.2.2 顺序表上基本运算的实现 26
2.3 顺序表应用举例 30
2.4 线性表的链式存储和运算实现 31
2.4.1 单链表 32
2.4.2 单链表基本运算的实现 33
2.4.3 循环链表 38
2.4.4 双向链表 39
2.4.5 静态链表 40
2.4.6 单链表应用举例 41
2.5 顺序表和链表的比较 46
本章小结 47
习题 48
第3章 栈和队列 52
3.1 栈 52
3.1.1 栈的定义及基本操作 52
3.1.2 栈的顺序存储及操作实现 53
3.1.3 栈的链式存储及操作实现 56
3.2 栈的应用举例 59
3.3 递归 69
3.3.1 递归定义 69
3.3.2 递归和栈的关系 70
3.3.3 递归算法实例 71
3.4 队列 74
3.4.1 队列的定义及基本操作 74
3.4.2 队列的顺序存储实现及操作实现 75
3.4.3 队列的链式存储实现及操作实现 79
3.5 队列应用举例 82
本章小结 84
习题 84
第4章 串 88
4.1 串及其基本运算 88
4.1.1 串的基本概念 88
4.1.2 串的基本运算 89
4.2 串的顺序存储及基本运算 91
4.2.1 串的定长顺序存储 91
4.2.2 定长顺序串的基本运算 92
4.3 模式匹配 93
4.3.1 简单的模式匹配算法 94
4.3.2 KMP算法 96
4.4 串的堆存储结构 100
4.4.1 动态堆存储 100
4.4.2 静态堆存储 103
4.5 串的链式存储结构 106
4.6 文本编辑——串操作应用 108
本章小结 109
习题 110
第5章 数组和广义表 113
5.1 数组 113
5.1.1 数组的定义 113
5.1.2 数组的内存映像 114
5.2 特殊矩阵的压缩存储 114
5.2.1 对称矩阵 115
5.2.2 三角矩阵 115
5.2.3 稀疏矩阵 115
5.3 广义表 121
5.3.1 广义表的定义 121
5.3.2 广义表的存储 122
5.3.3 广义表基本操作的实现 123
本章小结 127
习题 127
第6章 树和二叉树 131
6.1 树的基本概念 131
6.1.1 树的定义及其表示 131
6.1.2 基本术语 133
6.2 二叉树 134
6.2.1 二叉树的定义 134
6.2.2 二叉树的性质 134
6.2.3 二叉树的存储结构 136
6.3 遍历二叉树 138
6.3.1 先序遍历 138
6.3.2 中序遍历 140
6.3.3 后序遍历 141
6.3.4 按层次遍历二叉树 144
6.3.5 遍历算法的应用举例 145
6.4 线索二叉树 147
6.4.1 线索的概念 147
6.4.2 线索的算法实现 149
6.4.3 线索二叉树上的运算 151
6.5 树与森林 154
6.5.1 树的存储结构 154
6.5.2 树、森林和二叉树的转换 156
6.5.3 树和森林的遍历 158
6.6 哈夫曼树 159
6.6.1 基本术语 160
6.6.2 哈夫曼树的建立 161
本章小结 166
习题 167
第7章 图 171
7.1 图的基本概念 171
7.1.1 图的定义和术语 171
7.1.2 图的基本操作 175
7.2 图的存储结构 176
7.2.1 邻接矩阵 176
7.2.2 邻接表 178
7.2.3 十字链表 180
7.2.4 邻接多重表 181
7.3 图的遍历 183
7.3.1 深度优先搜索 183
7.3.2 广度优先搜索 184
7.3.3 应用图的遍历判定图的连通性 186
7.3.4 图的遍历的其他应用 187
7.4 最小生成树 198
7.4.1 生成树及生成森林 198
7.4.2 最小生成树的概念 198
7.4.3 构造最小生成树的Prim算法 199
7.4.4 构造最小生成树的Kruskal算法 201
7.5 最短路径 203
7.5.1 从一个源点到其他各点的最短路径 204
7.5.2 每一对顶点之间的最短路径 207
7.6 有向无环图及其应用 209
7.6.1 有向无环图的概念 209
7.6.2 AOV网与拓扑排序 210
7.6.3 AOE图与关键路径 215
本章小结 219
习题 220
第8章 查找 224
8.1 基本概念 224
8.2 线性表的查找 226
8.2.1 顺序查找 226
8.2.2 有序表的查找 227
8.2.3 分块查找 229
8.3 树表查找 230
8.3.1 二叉排序树 230
8.3.2 平衡二叉树(AVL树) 235
8.3.3 B-树和B+树 242
8.4 哈希表查找(杂凑法) 246
8.4.1 哈希表与哈希方法 246
8.4.2 常用的哈希方法 248
8.4.3 处理冲突的方法 249
8.4.4 哈希表的操作 252
8.4.5 哈希表查找及其分析 253
本章小结 254
习题 255
第9章 排序 259
9.1 基本概念 259
9.2 插入排序 261
9.2.1 直接插入排序 262
9.2.2 折半插入排序 263
9.2.3 希尔排序 265
9.3 交换排序 266
9.3.1 冒泡排序 267
9.3.2 快速排序 268
9.4 选择排序 272
9.4.1 简单选择排序 272
9.4.2 堆排序 273
9.5 归并排序 276
9.6 基数排序 278
9.6.1 多关键码排序 278
9.6.2 链式基数排序 279
本章小结 283
习题 283
第10章 数据结构综合应用 287
10.1 各种结构类型之间的关系概述 287
10.2 二叉树与分治策略 290
10.3 图的遍历及其应用 295
本章小结 305
习题 306
参考文献 307