第1章 绪论 1
1.1 数据结构的基本概念 1
1.2 数据类型和抽象数据类型 2
1.3 C语言的数据类型 3
1.4 用C语言描述算法的注意事项 9
1.5 算法设计目标和算法效率度量 10
习题一 12
第2章 线性表 14
2.1 线性表的逻辑结构及其基本操作 14
2.2.1 顺序表 15
2.2 线性表的顺序存储结构——顺序表 15
2.2.2 顺序表上的基本操作 16
2.2.3 顺序存储结构的特点 18
2.3 线性表的链式存储结构——链表 19
2 3.1 单链表 19
2.3.2 单链表中的基本操作 20
2.3.3 双向链表 26
2.3.4 循环单链表 29
2.3.5 链式存储结构的特点 30
2.4 静态链表 31
2.5.1 数据传递问题 36
2.5 应用实例 36
2.5.2 有序线性表合并问题 39
2.5.3 约瑟夫环问题 45
习题二 48
第3章 堆栈与队列 50
3.1 堆栈 50
3.1.1 堆栈的定义及其操作 50
3.1.2 堆栈的顺序存储结构 51
3.1.3 堆栈的链式存储结构 54
3.2 堆栈应用——表达式计算 56
3.3.2 队列的顺序存储结构 62
3.3 队列 62
3.3.1 队列的定义及其操作 62
3.3.3 队列的链式存储结构 67
3.4 队列应用举例 68
3.4.1 事件规划问题 68
3.4.2 键盘输入循环缓冲区问题 72
习题三 74
第4章 串 75
4.1 串及其基本操作 75
4.1.1 串的概念 75
4.1.2 串的基本操作 76
4.2.1 串的静态存储结构 77
4.2 串的存储结构 77
4.2.2 串的动态存储结构 78
4.3 串基本操作的实现 79
4.4 串的模式匹配算法 85
4.4.1 Brute-Force算法 85
4.4.2 KMP算法 87
4.5 串应用——文本编辑软件 91
习题四 97
5.1.1 数组的定义 99
第5章 数组 99
5.1 数组的定义及其基本操作 99
5.1.2 数组的基本操作 100
5.2 数组的存储结构 100
5.3 特殊矩阵的压缩存储 103
5.3.1 对称矩阵的压缩存储 103
5.3.2 对角矩阵的压缩存储 104
5.4 稀疏矩阵的压缩存储 105
5.4.1 稀疏矩阵的三元组顺序表 105
5.4.2 稀疏矩阵的三元组十字链表 108
习题五 112
6.1 递归的概念 114
第6章 递归 114
6.2 用C语言实现递归 117
6.3 递归算法的设计 121
6.4 递归模拟 124
6.4.1 递归的实现机制 124
6.4.2 用非递归算法模拟递归算法 124
习题六 132
7.1 树 134
7.1.1 树的定义 134
第7章 树和二叉树 134
7.1.2 树的表示方法 135
7.1.3 树的基本术语 136
7.1.4 树的基本操作 136
7.1.5 树的存储结构 136
7.2 二叉树 139
7.2.1 二叉树的基本概念 139
7.2.2 二叉树的性质 140
7.2.3 二叉树的存储结构 142
7.2.4 二叉树的基本操作及其实现 145
7.3.1 二叉树的遍历 149
7.3 二叉树的遍历 149
7.3.2 二叉树遍历的应用 153
7.3.3 递归遍历的非递归模拟 155
7.4 线索二叉树 160
7.5 二叉树的应用——哈夫曼树 168
7.5.1 哈夫曼树的基本概念 168
7.5.2 哈夫曼树在编码问题中的应用 169
7.5.3 哈夫曼树在判定问题中的应用 174
7.6 树、森林与二叉树的转换 175
7.6.1 树转换为二叉树 175
7.6.3 二叉树还原为树或森林 177
7.6.2 森林转换为二叉树 177
7.7 树和森林的遍历 178
7.7.1 树的遍历 178
7.7.2 森林的遍历 179
7.8 树的应用 179
7.8.1 判定树 179
7.8.2 集合的表示 181
习题七 182
第8章 图 185
8.1 图的基本概念 185
8.2.1 邻接矩阵 188
8.2 图的存储结构 188
8.2.2 邻接表 191
8.2.3 十字链表 198
8.2.4 邻接多重表 199
8.3 图的遍历 200
8.3.1 深度优先搜索的遍历方法 200
8.3.2 广度优先搜索的遍历方法 202
8.4 最小生成树 204
8.4.1 最小生成树的基本概念 204
8.4.2 prim算法构造最小生成树 205
8.4.3 Kruskal算法构造最小生成树 208
8.5 最短路径问题 211
8.5.1 单源最短路径 211
8.5.2 每对顶点之间的最短路径 215
8.6 关键路径问题 217
习题八 221
第9章 排序 223
9.1 排序的基本概念 223
9.2 插入排序 225
9.2.1 直接插入排序 225
9.2.2 希尔排序 227
9.3.1 直接选择排序 230
9.3 选择排序 230
9.3.2 堆排序 232
9.4 交换排序 238
9.4.1 冒泡排序 238
9.4.2 快速排序 239
9.5 归并排序 243
9.6 基数排序 246
习题九 253
10.1 基本概念 255
第10章 查找 255
10.2 顺序表的静态查找 256
10.2.1 顺序查找 256
10.2.2 二分查找 258
10.2.3 分块查找 262
10.3 树表的动态查找 265
10.3.1 二叉排序树查找 265
10.3.2 B_树查找 272
10.4 哈希表的查找 278
10.4.1 基本概念 278
10.4.2 构造哈希函数的方法 279
10.4.3 哈希冲突的解决方法 281
10.4.4 哈希表的查找 283
10.4.5 哈希算法举例 283
习题十 286
第11章 文件 287
11.1 文件概述 287
11.1.1 文件的演变过程及基本概念 287
11.1.2 文件的存储介质 288
11.1.3 文件的基本操作 289
11.2 顺序文件 290
11.3 索引文件 291
11.4 ISAM文件 292
11.5 VSAM文件 295
11.6 散列文件 297
习题十一 298
附录1 上机实验实例 299
附录1.1 有序线性链表的删除 299
附录1.2 中心对称字符串判断 304
附录1.3 计算机模拟迷宫问题 308
附录2 部分习题解答 313
参考文献 329