《数据结构与算法(C语言版)》是2012年中国铁道出版社出版的一本图书,作者是陈明。本书为高等院校计算机及相关专业“数据结构”课程的教学用书,系统地介绍了各种典型的数据结构。
基本介绍
- 书名:数据结构与算法(C语言版)
- 作者:陈明
- ISBN:7-113-13665
- 定价:32.00元
- 出版社:中国铁道出版社
- 出版时间:2012年1月
内容简介
内容包括:数据结构概论、线性表、栈与伫列、串、数组、树、图、查找、排序、递归、档案等;为了加强对算法的理解,还介绍了算法分析方面的内容。
本书语言与选材精练、概念清晰、注重实用、逻辑性强,对于各章节中所涉及的数据结构与算法都给出了C语言描述,并都附有大量的习题,便于学生理解与掌握。
本书适合作为高等院校计算机及相关专业的教材,也可作为计算机套用技术人员的参考书。
图书目录
第1章 数据结构概论 1
1.1 问题的提出 2
1.2 基本概念与术语 3
1.3 数据结构的概念 5
1.4 数据的逻辑结构、存储结构及运算 7
1.4.1 数据的逻辑结构 7
1.4.2 数据的存储结构 8
1.4.3 数据的运算 9
1.4.4 逻辑结构、存储结构及运算的关係 10
1.5 算法与算法特性 10
1.5.1 算法及其特性 10
1.5.2 算法的描述方法 11
1.5.3 算法与程式及数据结构 11
1.6 算法性能分析及算法度量 12
1.6.1 算法性能分析 12
1.6.2 算法度量 12
小结 15
习题 15
拓展实验:电话号码的查询 16
第2章 线性表 17
2.1 线性表的定义与运算 18
2.1.1 线性表的定义 18
2.1.2 线性表的抽象数据类型 18
2.2 线性表的顺序存储 19
2.2.1 顺序存储 19
2.2.2 顺序表的运算 21
2.3 线性表的链式存储 24
2.3.1 线性鍊表及运算 24
2.3.2 静态鍊表及运算 31
2.3.3 循环鍊表及运算 32
2.3.4 双向鍊表及运算 34
2.4 线性表的套用 36
2.4.1 约瑟夫问题 37
2.4.2 一元多项式求和问题 38
2.4.3 集合套用问题 41
小结 43
习题 43
拓展实验:线性表的合併 44
第3章 栈与伫列 46
3.1 栈 47
3.1.1 栈的定义 47
3.1.2 栈的顺序存储结构 48
3.1.3 栈的链式存储结构 50
3.2 栈的套用 52
3.2.1 子程式的调用和返回问题 52
3.2.2 数制转换问题 52
3.3 伫列 53
3.3.1 伫列的定义 53
3.3.2 伫列的顺序存储结构 54
3.3.3 伫列的链式存储结构 60
3.4 伫列的套用 64
3.4.1 设备速度不匹配问题 64
3.4.2 舞伴问题 65
小结 66
习题 66
拓展实验:算术表达式求值 67
第4章 串 68
4.1 串的基本概念 69
4.2 串的存储结构 70
4.2.1 串的静态存储结构 70
4.2.2 串的动态存储结构 71
4.3 串的基本运算 73
4.3.1 串的抽象数据类型定义 73
4.3.2 串的基本运算实现 74
4.4 模式匹配 78
4.4.1 BF算法 78
4.4.2 KMP算法 80
4.5 串的套用 84
小结 85
习题 85
拓展实验:设计简单的文本编辑器 86
第5章 数组 87
5.1 数组及其基本操作 87
5.1.1 数组的概念 88
5.1.2 抽象数据类型数组的定义 89
5.2 数组的存储结构 90
5.3 数组在矩阵运算中的套用 93
5.3.1 特殊矩阵的压缩存储 93
5.3.2 稀疏矩阵的压缩存储 94
小结 102
习题 102
拓展实验:一元多项式的值计算 103
第6章 树 104
6.1 树的概念 105
6.1.1 树的定义 105
6.1.2 树的表示方法 106
6.1.3 树的基本术语 106
6.1.4 树的ADT定义 107
6.2 二叉树 107
6.2.1 二叉树的定义及基本结构 108
6.2.2 二叉树的存储结构 109
6.2.3 二叉树的遍历 112
6.3 线索二叉树 115
6.3.1 二叉树的线索化 115
6.3.2 利用线索遍历 116
6.4 树、森林、二叉树之间的关係 120
6.4.1 树的存储结构 121
6.4.2 森林与二叉树的转换 124
6.4.3 树和森林的遍历 127
6.5 哈夫曼算法及其套用 128
6.5.1 哈夫曼树的定义 128
6.5.2 哈夫曼二叉树的构造 129
6.5.3 哈夫曼树在编码问题中的套用 131
小结 135
习题 135
拓展实验:创建二叉树 138
第7章 图 139
7.1 图的概念与ADT定义 140
7.1.1 图的概念 140
7.1.2 图的抽象数据类型定义 144
7.2 图的存储结构 144
7.2.1 邻接矩阵 145
7.2.2 邻接表 147
7.2.3 十字鍊表 150
7.2.4 邻接多重表 152
7.3 图的遍历 153
7.3.1 深度优先搜寻 153
7.3.2 广度优先搜寻 155
7.4 图的套用 157
7.4.1 生成树 157
7.4.2 最短路径 162
7.4.3 拓扑排序 166
7.4.4 关键路径 170
小结 176
习题 176
拓展实验:图的深度优先搜寻 179
第8章 查找 180
8.1 查找的基本概念 181
8.2 静态查找问题 182
8.2.1 顺序查找 182
8.2.2 二分查找 182
8.3 线性表的查找方法 184
8.3.1 线性查找 184
8.3.2 折半查找 185
8.3.3 分块查找 188
8.4 树表的查找方法 190
8.4.1 二叉查找树 190
8.4.2 平衡二叉树 196
8.4.3 B-树 202
8.5 哈希表的查找方法 203
8.5.1 哈希表 203
8.5.2 构造哈希表的基本方法 205
8.5.3 解决冲突的方法 206
8.5.4 哈希表的查找方法 209
8.6 各种查找方法的比较 210
小结 210
习题 210
拓展实验:折半查找 212
第9章 排序 213
9.1 排序的基本概念 214
9.2 内部排序 216
9.2.1 插入排序 216
9.2.2 冒泡排序 220
9.2.3 快速排序 221
9.2.4 选择排序 223
9.2.5 归併排序 229
9.2.6 基数排序 231
9.3 内部排序方法比较 234
9.4 内部排序方法的选择 235
9.5 外部排序简介 236
小结 236
习题 236
拓展实验:希尔排序 238
第10章 递归 239
10.1 递归的定义与类型 240
10.1.1 递归的定义 240
10.1.2 递归的类型 240
10.2 递归套用举例 240
10.2.1 汉诺塔问题 240
10.2.2 八皇后问题 243
10.3 递归的实现 244
10.4 递归到非递归的转换过程 247
10.5 递归的时间和空间複杂度 250
小结 251
习题 251
拓展实验:汉诺塔问题研究 252
第11章 档案 253
11.1 外存储器简介 254
11.2 有关档案的概念 255
11.2.1 档案及其类别 255
11.2.2 档案的操作 256
11.3 档案的组织 258
11.3.1 顺序档案 258
11.3.2 索引档案 259
11.3.3 散列档案 264
11.3.4 多关键字档案 265
小结 267
习题 267
拓展实验:索引档案 268
参考文献 269