第1章 绪论 1
1.1 引言 1
1.2 基本概念 2
1.3 “数据结构”课程的内容 5
1.4 类C语言和算法评价 6
1.4.1 类C语言 6
1.4.2 算法评价 8
习题1 10
第2章 顺序表 1
2.1 线性表 13
2.1.1 线性表的逻辑结构 13
2.1.2 线性表的基本运算 13
2.1.3 线性表的顺序存储结构 15
2.1.4 线性表基本运算的实现 16
2.2 栈和队列 18
2.2.1 栈 19
2.2.2 队列 33
习题2 37
第3章 链表 41
3.1 单链表 41
3.1.1 基本运算在单链表上的实现 42
3.1.2 单链表的应用示例 46
3.2 链栈和链队 51
3.2.1 基本运算在链栈上的实现 52
3.2.2 基本运算在链队上的实现 53
3.2.3 队列和栈的应用示例 55
3.3 循环链表与双重链表 60
3.3.1 循环链表 61
3.3.2 双重链表 62
习题3 63
第4章 数组和广义表 67
4.1 数组的逻辑结构 67
4.1.1 数组的逻辑结构 67
4.1.2 数组的顺序存储分配 67
4.1.3 矩阵的压缩存储 69
4.1.4 稀疏矩阵 70
4.1.5 用十字链表表示稀疏矩阵 76
4.2 广义表 81
4.2.1 广义表的基本概念 81
4.2.2 广义表链接表示法 82
习题4 84
第5章 字符串 86
5.1 字符串及其运算 86
5.2 字符串的存储表示 87
5.2.1 顺序表示 87
5.2.2 链接表示 89
5.2.3 模式匹配 91
习题5 93
第6章 树 95
6.1 基本术语及性质 95
6.1.1 基本术语 95
6.1.2 树的性质 96
6.2 树的抽象数据类型和树的存储 97
6.2.1 基本运算 97
6.2.2 树的存储 98
6.3 二叉树 101
6.3.1 二叉树的定义 101
6.3.2 二叉树的基本性质 102
6.3.3 二叉树的抽象数据类型与存储表示 103
6.3.4 树、森林与二叉树间的转换 106
6.4 二叉树的遍历 108
6.4.1 遍历的实现 108
6.4.2 遍历算法的应用示例 112
6.5 二叉线索树 115
6.6 树的遍历 121
6.7 树的应用 122
6.7.1 表达式求值 122
6.7.2 哈夫曼树及其应用 123
习题6 128
第7章 图 132
7.1 基本术语 133
7.2 图的存储结构 134
7.2.1 邻接矩阵 135
7.2.2 邻接表 137
7.2.3 十字链表 139
7.2.4 邻接多重表 143
7.3 图的遍历和求图的连通分量 143
7.3.1 深度优先搜索 144
7.3.2 广度优先搜索 145
7.3.3 求图的连通分量 147
7.4 生成树和最小生成树 147
7.5 最短路径 153
7.5.1 从某个源点到其余各顶点的最短路径 154
7.5.2 每一对顶点之间的最短路径 157
7.6 拓扑排序 159
7.7 关键路径 163
习题7 171
第8章 查找表 173
8.1 查找表的基本概念 173
8.2 静态查找表的实现 174
8.2.1 顺序查找 174
8.2.2 折半查找 176
8.2.3 分块查找 180
8.3 动态查找表的实现 183
8.3.1 二叉排序树 183
8.3.2 平衡二叉树 191
8.3.3 B-树和B+树 196
8.3.4 数字查找树 205
8.4 Hash法 208
8.4.1 构造Hash函数的方法 210
8.4.2 处理冲突的方法 212
8.4.3 哈希表的查找及性能分析 216
习题8 217
第9章 内排序 218
9.1 计数排序 219
9.2 直接插入排序 220
9.3 折半插入排序 222
9.4 冒泡排序 223
9.5 希尔排序 224
9.6 快速排序 227
9.7 简单选择排序 229
9.8 堆排序 231
9.9 归并排序 235
9.10 基数排序 238
9.11 总结 242
习题9 243
参考文献 244
附录 上机实验 245