第1章 引论 1
1.1 数据结构的概念 1
1.2 基本概念和术语 2
1.3 算法与算法分析 4
1.3.1 算法 4
1.3.2 算法设计的要求 4
1.3.3 算法效率 5
1.3.4 算法的空间需求 6
1.4 小结 7
1.5 习题 7
第2章 线性表 8
2.1 线性表的类型定义 8
2.2 线性表的顺序存储 11
2.3 链式线性表 14
2.3.1 线性链表 14
2.3.2 循环链表 17
2.3.3 双向链表 18
2.4 小结 19
2.5 习题 19
第3章 栈和队列 20
3.1 栈 20
3.1.1 栈的概念 20
3.1.2 栈的表示和实现 20
3.2 栈的应用举例 22
3.2.1 数制转换 22
3.2.2 算术表达式的计算 23
3.3 队列 25
3.3.1 队列的概念 25
3.3.2 队列的存储表示 26
3.3.3 队列的顺序存储表示与循环队列 28
3.4 小结 30
3.5 习题 30
第4章 串 31
4.1 串的概念 31
4.1.1 串的定义 31
4.1.2 串的有关操作 32
4.2 串的存储结构 34
4.2.1 静态存储结构 34
4.2.2 动态存储结构 35
4.3 串的基本操作 37
4.3.1 静态存储串的操作 37
4.3.2 堆结构存储串的操作 40
4.4 应用举例 42
4.5 小结 44
4.6 习题 44
第5章 数组 46
5.1 数组及其操作 46
5.2 数组的顺序存储结构 47
5.3 矩阵的压缩存储 49
5.3.1 特殊矩阵 49
5.3.2 稀疏矩阵 50
5.3.3 三元组表 51
5.3.4 十字链表 54
5.4 小结 57
5.5 习题 58
第6章 树 59
6.1 基本术语 59
6.2 二叉树 60
6.2.1 二叉树的概念 61
6.2.2 二叉树的基本操作 64
6.2.3 二叉树的存储结构 65
6.3 遍历二叉树和穿线二叉树 66
6.3.1 遍历二叉树 66
6.3.2 线索二叉树 70
6.4 二叉排序树 73
6.4.1 二叉排序树的概念 73
6.4.2 二叉排序树的构造 74
6.5 树与二叉树 77
6.5.1 树的存储结构 77
6.5.2 树转换为二叉树 80
6.6 最优二叉树及其应用 81
6.6.1 最优二叉树的概念 81
6.6.2 哈夫曼(Huffman)算法 83
6.6.3 哈夫曼编码 84
6.7 小结 85
6.8 习题 86
第7章 图 88
7.1 图的概念 88
7.2 图的存储结构 90
7.2.1 邻接矩阵 90
7.2.2 邻接表 92
7.2.3 邻接多重表 95
7.3 图的遍历 96
7.3.1 深度优先搜索 96
7.3.2 广度优先搜索 98
7.4 生成树 99
7.4.1 图的连通分量 99
7.4.2 最小生成树 100
7.5 最短路径 102
7.5.1 从某个源点到其余各顶点的最短路径 103
7.5.2 每一对顶点之间的最短路径 104
7.6 AOV网和图的排序 107
7.7 AOE网和关键路径 110
7.8 小结 115
7.9 习题 116
第8章 查找技术 118
8.1 顺序表的查找 119
8.2 有序表的查找 120
8.3 分块查找 124
8.4 二叉排序树中的查找 127
8.5 哈希(hash)查找 129
8.5.1 哈希表 129
8.5.2 构造哈希函数的几种方法 130
8.5.3 处理冲突 134
8.5.4 哈希查找算法及其分析 136
8.6 小结 140
8.7 习题 140
第9章 排序 142
9.1 概述 142
9.2 插入排序 143
9.2.1 直接插入排序 143
9.2.2 折半插入排序 145
9.2.3 2-路插入排序 146
9.2.4 表插入排序 149
9.2.5 希尔排序 152
9.3 选择排序 155
9.3.1 简单选择排序 155
9.3.2 堆排序 156
9.4 快速排序 162
9.5 归并排序 165
9.6 基数排序 168
9.7 各种内部排序方法的比较讨论 172
9.8 外部排序 174
9.8.1 外存信息的存取方法 174
9.8.2 外部排序的方法 176
9.9 小结 184
9.10 习题 184
第10章 文件 186
10.1 文件的基本概念 186
10.1.1 文件及其分类 186
10.1.2 文件的基本操作(运算) 187
10.1.3 文件的物理结构 188
10.2 顺序文件 188
10.3 索引文件 189
10.4 直接存取文件(散列文件) 191
10.5 多关键字文件 192
10.5.1 多重表文件 193
10.5.2 倒排文件 194
10.6 小结 194
10.7 习题 195
参考文献 196