第1章 绪论 1
1.1 数据结构与程序设计 1
1.1.1 学习数据结构的意义 1
1.1.2 数据与数据结构 3
1.1.3 数据结构类型 4
1.2 抽象数据类型 6
1.2.1 C语言中的数据类型 6
1.2.2 抽象数据类型 7
1.3 算法分析 8
1.3.1 问题、算法与程序 8
1.3.2 算法效率的度量 9
本章小结 13
思考与练习题 14
第2章 线性表 15
2.1 线性表的基本概念 15
2.1.1 线性表的定义与特点 15
2.1.2 线性表的两类存储结构 16
2.2 顺序表的算法实现 18
2.2.1 顺序表的创建 18
2.2.2 顺序表内结点的插入 21
2.2.3 顺序表内结点的查找 25
2.2.4 顺序表内元素的删除 29
2.3 单链表的算法实现 33
2.3.1 单链表的结点结构和一般形式 33
2.3.2 单链表的创建 33
2.3.3 单链表内元素的插入 36
2.3.4 单链表内元素的查找 39
2.3.5 单链表内元素的删除 44
2.3.6 两个单链表的合并 47
2.4 双向链表的算法实现 52
2.4.1 双向链表的结点结构和一般形式 52
2.4.2 双向链表的创建 53
2.4.3 双向链表内元素的插入 55
2.4.4 双向链表内元素的查找 58
2.4.5 双向链表内元素的删除 58
2.5 循环链表的算法实现 62
2.5.1 循环链表的结点结构和一般形式 62
2.5.2 循环链表的创建 62
本章小结 65
思考与练习题 65
第3章 栈与队列 67
3.1 栈的基本概念 67
3.1.1 栈的定义与特点 67
3.1.2 栈的两类存储结构 67
3.2 顺序栈的算法实现 68
3.2.1 顺序栈的建立和入栈 68
3.2.2 顺序栈出栈 70
3.3 队列的基本概念 73
3.3.1 队列的定义与特点 73
3.3.2 队列的存储结构 73
3.4 顺序队列的算法实现 75
3.4.1 顺序队列建立和入队 75
3.4.2 顺序队列出队 77
3.5 循环队列的算法实现 80
3.5.1 循环队列建立和入队 80
3.5.2 循环队列出队 82
3.6 链队列的算法实现 85
3.6.1 链队列建立和入队 85
3.6.2 链队列出队 87
3.7 栈和队列的应用——算术表达式求值 90
本章小结 101
思考与练习题 101
第4章 串 103
4.1 串的基本概念 103
4.1.1 串的定义与特点 103
4.1.2 串的存储结构 104
4.2 串的算法实现 106
4.2.1 串赋值算法 106
4.2.2 求子串算法 108
4.2.3 串比较算法 110
4.2.4 串联接算法 112
4.3 串的模式匹配算法实现 115
4.3.1 串的朴素模式匹配算法 115
4.3.2 改进的模式匹配算法 118
本章小结 122
思考与练习题 122
第5章 数组和广义表 124
5.1 数组的基本概念 124
5.1.1 数组的定义与特点 124
5.1.2 数组的存储结构 125
5.2 特殊矩阵的压缩存储 127
5.3 矩阵的算法实现 130
5.4 广义表的基本概念 136
5.4.1 广义表的定义与图形表示 136
5.4.2 广义表的存储结构 137
5.5 广义表的算法实现 138
本章小结 143
思考与练习题 144
第6章 树和二叉树 146
6.1 树的基本概念 146
6.1.1 树的定义与基本术语 146
6.1.2 树的表示形式和存储结构 147
6.2 二叉树的基本概念 151
6.2.1 二叉树的定义与性质 151
6.2.2 二叉树的存储结构 153
6.2.3 树、森林和二叉树的转换 155
6.2.4 二叉树的遍历 157
6.3 二叉树算法实现 159
6.3.1 二叉树的建立 159
6.3.2 递归的二叉树前序遍历 161
6.3.3 非递归的二叉树前序遍历 163
6.3.4 递归的二叉树中序遍历 167
6.3.5 非递归的二叉树中序遍历 169
6.3.6 递归的二叉树后序遍历 172
6.3.7 非递归的二叉树后序遍历 174
6.4 哈夫曼树及其应用 178
6.4.1 哈夫曼树与哈夫曼编码 179
6.4.2 哈夫曼算法实现 180
本章小结 186
思考与练习题 186
第7章 图 187
7.1 图的基本概念 187
7.1.1 图的定义和术语 187
7.1.2 图的表示与存储结构 191
7.2 图的构造算法实现 195
7.2.1 构造数组存储的图 195
7.2.2 构造邻接表存储的无向图 199
7.2.3 构造邻接表存储的有向图 202
7.2.4 构造十字链表存储的有向图 205
7.2.5 构造邻接多重表存储的无向图 208
7.3 图的遍历算法实现 212
7.3.1 深度优先遍历算法 212
7.3.2 广度优先遍历算法 217
7.4 最小生成树算法实现 224
7.4.1 普里姆算法 224
7.4.2 克鲁斯卡尔算法 231
7.5 图的应用 237
7.5.1 拓扑排序 237
7.5.2 关键路径 244
7.5.3 最短路径 253
本章小结 259
思考与练习题 259
第8章 查找 262
8.1 查找的基本概念 262
8.1.1 相关术语 262
8.1.2 查找表结构 263
8.2 顺序查找算法的实现 263
8.3 折半查找算法的实现 266
8.4 分块查找算法 271
8.4.1 索引表 271
8.4.2 分块查找算法实现 272
8.5 二叉排序树及其算法实现 275
8.5.1 二叉排序树及其查找过程 275
8.5.2 二叉排序树插入结点的过程 276
8.5.3 二叉排序树删除结点的过程 277
8.5.4 二叉排序树的算法实现 278
8.6 平衡二叉树及其算法实现 284
8.6.1 平衡二叉排序树及其构造 284
8.6.2 平衡二叉排序树算法实现 288
8.7 B-树及其算法实现 295
8.7.1 B-树 295
8.7.2 B-树的查找 296
8.7.3 B-树的插入 297
8.7.4 B-树的删除 297
8.7.5 B-树的算法实现 300
8.8 哈希查找的算法实现 307
8.8.1 哈希表 307
8.8.2 哈希函数构造方法 307
8.8.3 哈希冲突的处理方法 308
8.8.4 哈希表的算法实现 310
本章小结 314
思考与练习题 315
第9章 排序 317
9.1 排序的基本概念 317
9.1.1 术语介绍 317
9.1.2 常用的内容排序算法简介类型 318
9.2 插入排序的算法实现 320
9.2.1 直接插入排序 320
9.2.2 希尔排序 323
9.3 快速排序的算法实现 327
9.4 选择排序的算法实现 331
9.4.1 直接选择排序 331
9.4.2 堆排序 335
9.5 归并排序的算法实现 339
9.6 基数排序的算法实现 342
9.7 各种内部排序方法的比较 349
9.7.1 时间性能 349
9.7.2 空间性能 349
9.7.3 排序方法的稳定性 350
9.8 外部排序 350
本章小结 350
思考与练习题 350
第10章 文件 353
10.1 文件的基本概念 353
10.1.1 文件记录与文件结构 353
10.1.2 文件操作 354
10.2 文件的存储结构 354
10.2.1 顺序文件 354
10.2.2 索引文件 355
10.2.3 散列文件 356
10.2.4 多关键字文件 357
10.2.5 倒排序文件 357
本章小结 358
思考与练习题 358
参考文献 359