目录 1
第3版前言 1
第2版前言 1
前言 1
第0章 C语言程序设计 1
0.1 程序的结构 1
0.2 函数 2
0.2.1 返回值 2
0.2.2 输入型参数 3
0.2.3 输出型参数 4
0.3 结构体 6
0.4 自定义语句 7
0.5 动态内存分配 8
0.6 一个程序例子 10
习题零 13
第1章 绪论 14
1.1 数据结构的基本概念 14
1.2 抽象数据类型和软件构造方法 17
1.3 算法和算法的时间复杂度 18
1.3.1 算法 18
1.3.2 算法设计目标 20
1.3.3 算法时间效率的度量 21
1.4 算法书写规范 25
习题一 25
2.1.1 线性表的定义 27
第2章 线性表 27
2.1 线性表抽象数据类型 27
2.1.2 线性表抽象数据类型 28
2.2 线性表的顺序表示和实现 29
2.2.1 顺序表的存储结构 29
2 2 2 顺序表操作的实现 30
2 2 3 顺序表操作的效率分析 33
2 2.4 顺序表应用举例 33
2.3 线性表的链式表示和实现 37
2.3.1 单链表的存储结构 37
2 3 2 单链表的操作实现 40
2.3.4 单链表应用举例 45
2.3 3 单链表操作的效率分析 45
2 3 5 循环单链表 47
2 3 6 双向链表 47
2 4 静态链表 51
2.5 算法设计举例 52
2 5 1 顺序表算法设计举例 52
2 5.2 单链表算法设计举例 53
习题二 55
第3章 堆栈和队列 58
3 1 堆栈 58
3.1.1 堆栈的基本概念 58
3 1.2 堆栈抽象数据类型 60
3 1 3 堆栈的顺序表示和实现 60
3 1.4 堆栈的链式表示和实现 63
3.2 堆栈应用 66
3.2.1 括号匹配问题 66
3.2.2 表达式计算问题 69
3.3 队列 72
3.3.1 队列的基本概念 72
3 3.2 队列抽象数据类型 73
3 3.3 顺序队列 73
3 3.4 顺序循环队列的表示和实现 74
3.3.5 链式队列 77
3 3.6 队列的应用 80
3 4.1 顺序优先级队列的设计和实现 82
3 4 优先级队列 82
3 4.2 优先级队列的应用 85
习题三 87
第4章 串 90
4.1 串 90
4 1.1 串及其基本概念 90
4 1 2 串的抽象数据类型 91
4 1 3 C语言的串函数 92
4.2 串的存储结构 94
4.2.1 串的顺序存储结构 94
4.2.2 串的链式存储结构 95
4.3 串基本操作的实现算法 96
4.4.1 Brute-Force算法 104
4.4 串的模式匹配算法 104
4 4.2 KMP算法 106
4 4.3 Brute-Force算法和KMP算法的比较 110
习题四 112
第5章 数组 114
5.1 数组 114
5.1.1 数组的定义 114
5.1.2 数组的实现机制 115
5.1.3 数组抽象数据类型 115
5 2 动态数组 116
5.2.1 动态数组的设计方法 116
5 2 2 动态数组和静态数组对比 119
5.3 特殊矩阵的压缩存储 120
5.4 稀疏矩阵的压缩存储 121
5 4.1 稀疏矩阵的三元组顺序表 122
5.4.2 稀疏矩阵的三元组链表 127
习题五 129
第6章 递归算法 132
6.1 递归的概念 132
6.2 递归算法的执行过程 133
6 3 递归算法的设计方法 136
6.4 递归过程和运行时栈 138
6.5 递归算法的效率分析 140
6.6 递归算法到非递归算法的转换 142
6 7 设计举例 145
6 7.1 一般递归算法设计举例 145
6 7.2 回溯法及设计举例 148
习题六 152
第7章 树和二叉树 155
7.1 树 155
7 1 1 树的定义 155
7 1.2 树的表示方法 156
7.1.3 树的抽象数据类型 157
7.1.4 树的存储结构 158
7.2 二叉树 160
7.2.1 二叉树的定义 160
7.2.2 二叉树抽象数据类型 161
7.2.3 二叉树的性质 162
7.3.1 二叉树的存储结构 164
7.3 二叉树的设计和实现 164
7.3.2 二叉链存储结构的二叉树操作实现 166
7.4 二叉树遍历 169
7.4.1 二叉树遍历 169
7 4 2 二叉链存储结构下二叉树遍历的实现 171
7 4 3 二叉树遍历的应用 172
7.4.4 非递归的二叉树遍历算法 175
7.5 线索二叉树 177
7 5.1 线索二叉树的概念 177
7.5.2 中序线索二叉树的设计 179
7 5.3 中序线索二叉树循环操作的设计 181
7.5.4 设计举例 182
7.6.1 哈夫曼树的基本概念 184
7.6 哈夫曼树 184
7.6.2 哈夫曼编码问题 185
7.6.3 哈夫曼编码问题设计和实现 186
7.7 树与二叉树的转换 192
7.7.1 树转换为二叉树 193
7.7.2 二叉树还原为树 193
7.8 树的遍历 194
习题七 195
第8章 图 197
8.1 图 197
8.1.1 图的基本概念 197
8.1.2 图的抽象数据类型 199
8.2.1 图的邻接矩阵存储结构 200
8.2 图的存储结构 200
8.2.2 图的邻接表存储结构 202
8.3 图的实现 202
8 3.1 邻接矩阵存储结构下图操作的实现 202
8.3.2 邻接表存储结构下图操作的实现 207
8.4 图的遍历 212
8 4.1 图的深度和广度优先遍历算法 212
8.4.2 图的深度和广度优先遍历算法实现 214
8.5 最小生成树 217
8.5.1 最小生成树的基本概念 217
8 5 2 普里姆算法 218
8.5.3 克鲁斯卡尔算法 223
8.6 1 最短路径的基本概念 224
8.6 最短路径 224
8.6.2 从一个结点到其余各结点的最短路径 225
8.6.3 每对结点之间的最短路径 229
习题八 232
第9章 排序 234
9.1 排序的基本概念 234
9.2 插入排序 236
9.2.1 直接插入排序 236
9.2.2 希尔排序 239
9.3 选择排序 241
9.3.1 直接选择排序 241
9.3.2 堆排序 242
9.4.1 冒泡排序 247
9.4 交换排序 247
9.4.2 快速排序 249
9.5 归并排序 251
9.6 基数排序 254
9.7 性能比较 257
习题九 258
第10章 查找 260
10.1 查找的基本概念 260
10 2 静态查找表 261
10.2.1 顺序表 261
10.2.2 有序顺序表 262
10.2 3 索引顺序表 264
10.3.1 二叉排序树 267
10.3 动态查找表 267
10.3.2 B树 274
10.4 哈希表 278
10.4.1 哈希表的基本概念 278
10 4.2 哈希函数构造方法 280
10.4.3 哈希冲突解决方法 281
10.4.4 哈希表设计举例 283
习题十 287
第11章 文件 288
11.1 文件概述 288
11.1 1 文件的演变过程及基本概念 288
11.1 2 文件的存储介质 289
11.1 3 文件的基本操作 291
11.2 顺序文件 292
11 3 索引文件 293
11 4 ISAM文件 294
11 5 VSAM文件 296
11 6 散列文件 298
习题十一 300
附录1 上机实习内容规范和实习报告范例 301
附录1.1 上机实习内容规范 301
附录1.2 上机实习报告范例——回文问题 302
附录1.3 上机实习报告范例——约瑟夫环问题 308
附录2 部分习题解答 314
参考文献 330