第1章 引言 1
1.1 数据结构的概念 2
1.2 数据结构的内容 6
1.2.1 数据的逻辑结构 7
1.2.2 数据的存储结构 7
1.3 算法 8
1.3.1 算法的概念 8
1.3.2 算法的评价标准 9
1.3.3 算法的描述 10
1.3.4 算法性能分析 12
习题1 18
第一篇 线性结构 23
第2章 线性表 23
2.1 应用实例 23
2.2 线性表的概念及运算 24
2.2.1 线性表的逻辑结构 24
2.2.2 线性表的运算 24
2.3 线性表的顺序存储 25
2.3.1 顺序表 25
2.3.2 顺序表的基本运算 26
2.4 线性表的链式存储 30
2.4.1 单链表 31
2.4.2 单链表基本运算 32
2.4.3 循环链表 41
2.4.4 双向链表 42
2.4.5 静态链表 44
2.5 顺序表和链表的比较 45
2.6 实例分析与实现 45
习题2 56
第3章 栈和队列 58
3.1 应用实例 58
3.2 栈 59
3.2.1 栈的概念及运算 59
3.2.2 栈的顺序存储结构 60
3.2.3 栈的链式存储结构 64
3.2.4 栈的应用 67
3.3 队列 74
3.3.1 队列的概念及其运算 74
3.3.2 循环队列 76
3.3.3 链队列 79
3.4 实例分析与实现 81
3.5 算法总结——递归与分治算法 84
习题3 86
第4章 串 88
4.1 应用实例 88
4.2 串及其运算 89
4.2.1 串的基本概念 89
4.2.2 串的基本运算 90
4.3 串的存储结构及实现 93
4.3.1 定长顺序串 93
4.3.2 堆串 97
4.3.3 块链串 100
4.4 串的模式匹配 101
4.4.1 BF模式匹配算法 101
4.4.2 KMP模式匹配算法 103
4.5 实例分析与实现 110
4.5.1 串的实例分析 110
4.5.2 简单文本编辑软件的实现 111
4.6 算法总结 115
习题4 116
第5章 多维数组和广义表 118
5.1 应用实例 118
5.2 多维数组 118
5.3 矩阵的压缩存储 121
5.3.1 特殊矩阵 121
5.3.2 稀疏矩阵 122
5.4 广义表 131
5.4.1 广义表的概念 131
5.4.2 广义表的存储 132
5.4.3 广义表的操作 134
5.5 实例分析与实现 137
习题5 139
第二篇 非线性结构 143
第6章 树 143
6.1 应用实例 143
6.2 树的概念 145
6.2.1 树的定义与表示 145
6.2.2 树的基本术语 147
6.2.3 树的抽象数据类型定义 148
6.3 二叉树 149
6.3.1 二叉树的定义 149
6.3.2 二叉树的性质 151
6.3.3 二叉树的存储 153
6.4 二叉树的遍历 156
6.4.1 二叉树的遍历及递归实现 156
6.4.2 二叉树遍历的非递归实现 159
6.4.3 遍历算法的应用 164
6.4.4 由遍历序列确定二叉树 169
6.5 线索二叉树 170
6.5.1 线索二叉树的基本概念 171
6.5.2 二叉树的线索化 172
6.5.3 线索二叉树的遍历 173
6.6 树和森林 174
6.6.1 树的存储 174
6.6.2 树、森林与二叉树的转换 178
6.6.3 树和森林的遍历 182
6.7 哈夫曼树及其应用 184
6.7.1 哈夫曼树 184
6.7.2 哈夫曼编译码 188
6.8 实例分析与实现 190
6.8.1 表达式树 190
6.8.2 树与等价类的划分 193
6.9 回溯法与分支限界法 196
6.9.1 解空间树与回溯法 196
6.9.2 求解N皇后问题的回溯法 198
6.9.3 解空间树与分支限界法 199
6.10 算法总结 200
习题6 201
第7章 图 204
7.1 应用实例 204
7.2 图的基本概念 205
7.3 图的存储结构 208
7.3.1 邻接矩阵 208
7.3.2 邻接表 210
7.3.3 十字链表 212
7.3.4 多重链表 214
7.4 图的遍历 215
7.4.1 深度优先搜索遍历 215
7.4.2 广度优先搜索遍历 218
7.5 图的应用 220
7.5.1 最小生成树 220
7.5.2 拓扑排序 225
7.5.3 关键路径 229
7.5.4 最短路径 234
7.6 实例分析与实现 239
7.7 算法总结——贪心算法 239
习题7 244
第三篇 相关技术 251
第8章 查找 251
8.1 概述 251
8.2 基于线性表的查找 252
8.2.1 顺序查找 252
8.2.2 折半查找 255
8.2.3 索引查找 258
8.3 基于树的查找 259
8.3.1 二叉排序树 259
8.3.2 平衡二叉树 268
8.3.3 B树和B+树 277
8.3.4 伸展树 285
8.3.5 红黑树 287
8.4 散列 293
8.4.1 哈希函数的构造方法 294
8.4.2 处理冲突的方法 296
8.4.3 哈希表查找 298
8.5 算法总结 302
习题8 303
第9章 排序 306
9.1 概述 306
9.2 插入类排序 308
9.2.1 直接插入排序 309
9.2.2 折半插入排序 312
9.2.3 希尔排序 313
9.3 交换类排序 315
9.3.1 冒泡排序 315
9.3.2 快速排序 318
9.4 选择类排序 321
9.4.1 简单选择排序 321
9.4.2 树形选择排序 323
9.4.3 堆排序 324
9.5 归并类排序 331
9.5.1 二路归并排序 331
9.5.2 自然归并排序 334
9.6 分配类排序 335
9.6.1 多关键字排序 335
9.6.2 链式基数排序 336
9.7 外部排序 339
9.7.1 置换选择排序 340
9.7.2 多路归并外排序 343
9.8 算法总结 347
习题9 349
第四篇 综合实践 355
第10章 数据结构与算法实践 355
10.1 实验题目及要求 355
实验一 线性表及其应用 355
实验二 栈和队列及其应用 356
实验三 多维数组和广义表 358
实验四 树及其应用 359
实验五 图及其应用 361
实验六 查找 362
综合实验一 迷宫问题 362
综合实验二 哈夫曼编/译码器 363
综合实验三 全国交通咨询模拟 363
10.2 实验报告格式 364
10.3 典型案例分析 365
实验一 “马”踏棋盘问题 365
实验二 文件压缩和解压缩 375
实验三 校园导游系统 381
参考文献 386