简介
本书介绍各种常用的数据结构。全书共10章,主要内容包括:绪论、线性表、栈和队列、串、数组、树和二叉树、图、排序、查找和文件。本书注重基础,突出重点,内容精炼,通俗易懂,实例丰富,实用性强。书中采用c语言描述算法,清晰简洁,学生易于理解和掌握。为帮助读者深入理解、巩固和深化理论知识,每一章之后配有各种类型的练习题,可供不同层次的读者选用。本书配套有《数据结构(c语言版)学习指导与习题解答》。
本书可作为高等院校应用型本科计算机及相关专业的教材,也适合成人高校、高职高专和民办院校选用,可以作为信息类相关专业的教学或参考书,还可以供计算机自学人员学习参考。
本书所配电子教案及书中程序源代码均可以从中国水利水电出版社网站上下载,网址为:http://www.waterpub.com.cn。
目录
第1章 概论 1
1.1 数据结构 1
1.1.1 数据结构 1
1.1.2 数据的逻辑结构 3
1.1.3 数据的存储结构 3
1.1.4 数据的运算集合 5
1.2 数据类型和抽象数据类型 6
1.2.1 数据类型 7
1.2.2 数据结构 7
1.2.3 抽象数据类型 7
1.2.4 抽象数据类型的描述和实现 8
1.3 算法和算法分析 9
1.3.1 算法 9
1.3.2 算法的时间和空间复杂度 9
习题 10
第2章 线性表及其顺序存储 12
2.1 线性表 12
2.2 顺序表 12
2.2.1 顺序表 12
2.2.2 顺序表的实现 13
2.3 栈 18
2.3.1 栈 18
2.3.2 顺序栈及其实现 19
2.3.3 栈的应用之一——括号匹配 21
2.3.4 栈的应用之二——算术表达式求值 23
2.4 队列 28
2.4.1 队列 28
2.4.2 顺序队列及其实现 29
2.4.3 顺序循环队列及其实现 32
习题 34
第3章 线性表的链式存储 35
3.1 链式存储 35
3.2 单链表 36
3.2.1 单链表 36
3.2.2 单链表的实现 37
3.3 带头结点的单链表 43
3.3.1 带头结点的单链表 43
3.3.2 带头结点的单链表的实现 44
3.4 循环单链表 48
3.4.1 循环单链表 48
3.4.2 循环单链表的实现 49
3.5 双链表 56
3.5.1 双链表 56
3.5.2 双链表的实现 57
3.6 链式栈 64
3.6.1 链式栈 64
3.6.2 链式栈的实现 65
3.7 链式队列 67
3.7.1 链式队列 67
3.7.2 链式队列的实现 68
习题 71
第4章 字符串、数组和特殊矩阵 72
4.1 字符串 72
4.1.1 字符串的基本概念 72
4.1.2 字符串类的定义 73
4.1.3 字符串的存储及其实现 74
4.2 字符串的模式匹配 81
4.2.1 朴素的模式匹配算法 81
4.2.2 快速模式匹配算法 82
4.3 数组 85
4.3.1 数组和数组元素 85
4.3.2 数组类的定义 86
4.3.3 数组的顺序存储及实现 86
4.4 特殊矩阵 90
4.4.1 对称矩阵的压缩存储 90
4.4.2 三角矩阵的压缩存储 92
4.4.3 带状矩阵的压缩存储 93
4.5 稀疏矩阵 95
4.5.1 稀疏矩阵类的定义 95
4.5.2 稀疏矩阵的顺序存储及其实现 95
4.5.3 稀疏矩阵的链式存储及实现 98
习题 102
第5章 递归 103
5.1 递归与递归程序设计 103
5.2 递归程序执行过程的分析 105
5.3 递归程序到非递归程序的转换 108
5.3.1 简单递归程序到非递归程序的转换 109
5.3.2 复杂递归程序到非递归程序的转换 112
5.4 递归程序设计的应用实例 116
习题 118
第6章 树型结构 120
6.1 树的基本概念 120
6.2 树类的定义 122
6.3 树的存储结构 123
6.3.1 双亲表示法 123
6.3.2 孩子表示法 124
6.3.3 孩子兄弟表示法 127
6.4 树的遍历 127
6.5 树的线性表示 131
6.5.1 树的括号表示 131
6.5.2 树的层号表示 133
习题 135
第7章 二叉树 137
7.1 二叉树的基本概念 137
7.2 二叉树的基本运算 139
7.3 二叉树的存储结构 140
7.3.1 顺序存储结构 140
7.3.2 链式存储结构 142
7.4 二叉树的遍历 144
7.4.1 二叉树遍历的定义 144
7.4.2 二叉树遍历的递归实现 144
7.4.3 二叉树遍历的非递归实现 146
7.5 二叉树其他运算的实现 150
7.6 穿线二叉树 152
7.6.1 穿线二叉树的定义 152
7.6.2 中序穿线二叉树的基本运算 153
7.6.3 中序穿线二叉树的存储结构及其实现 154
7.7 树、森林和二叉树的转换 156
7.7.1 树、森林到二叉树的转换 156
7.7.2 二叉树到树、森林的转换 157
习题 158
第8章 图 159
8.1 图的基本概念 159
8.2 图的基本运算 162
8.3 图的基本存储结构 163
8.3.1 邻接矩阵及其实现 163
8.3.2 邻接表及其实现 166
8.3.3 邻接多重表 168
8.4 图的遍历 169
8.4.1 深度优先遍历 169
8.4.2 广度优先遍历 171
8.5 生成树与最小生成树 173
8.5.1 最小生成树的定义 174
8.5.2 最小生成树的普里姆(Prim)算法 175
8.5.3 最小生成树的克鲁斯卡尔(Kruskal)算法 178
8.6 最短路径 180
8.6.1 单源最短路径 180
8.6.2 所有顶点对的最短路径 183
8.7 拓扑排序 186
8.8 关键路径 189
习题 194
第9章 检索 196
9.1 检索的基本概念 196
9.2 线性表的检索 197
9.2.1 顺序检索 197
9.2.2 二分法检索 199
9.2.3 分块检索 201
9.3 二叉排序树 203
9.4 丰满树和平衡树 210
9.4.1 丰满树 211
9.4.2 平衡二叉排序树 212
9.5 最佳二叉排序树和Huffman树 218
9.5.1 扩充二叉树 218
9.5.2 最佳二叉排序树 220
9.5.3 Huffman树 225
9.6 B-树 228
9.6.1 B-树的定义 228
9.6.2 B-树的基本操作 229
9.7 散列表检索 234
9.7.1 散列存储 234
9.7.2 散列函数的构造 235
9.7.3 冲突处理 236
习题 240
第10章 内排序 242
10.1 排序的基本概念 242
10.2 插入排序 243
10.2.1 直接插入排序 243
10.2.2 二分法插入排序 246
10.2.3 表插入排序 248
10.2.4 Shell插入排序 249
10.3 选择排序 251
10.3.1 直接选择排序 251
10.3.2 树型选择排序 253
10.3.3 堆排序 256
10.4 交换排序 259
10.4.1 冒泡排序 259
10.4.2 快速排序 261
10.5 归并排序 263
10.6 基数排序 267
10.6.1 多排序码的排序 267
10.6.2 静态链式基数排序 267
习题 271
第11章 外排序 273
11.1 外存储器简介 273
11.1.1 磁盘存储器 273
11.1.2 磁带存储器 273
11.2 文件简介 274
11.2.1 文件的逻辑结构 274
11.2.2 文件的存储结构 274
11.3 外排序——磁盘排序 274
11.3.1 磁盘排序 274
11.3.2 多路归并 276
11.3.3 初始有序串的生成 278
11.4 外排序——磁带排序 279
11.4.1 磁带排序 279
11.4.2 非平衡归并 281
习题 282
第12章 动态存储管理 283
12.1 概述 283
12.2 可利用空间表及分配方法 285
12.3 边界标识法 288
12.3.1 可利用空间表的结构 288
12.3.2 分配算法 289
12.3.3 回收算法 291
12.4 无用单元的收集 293
12.5 存储压缩 296
习题 298
参考文献 299
1.1 数据结构 1
1.1.1 数据结构 1
1.1.2 数据的逻辑结构 3
1.1.3 数据的存储结构 3
1.1.4 数据的运算集合 5
1.2 数据类型和抽象数据类型 6
1.2.1 数据类型 7
1.2.2 数据结构 7
1.2.3 抽象数据类型 7
1.2.4 抽象数据类型的描述和实现 8
1.3 算法和算法分析 9
1.3.1 算法 9
1.3.2 算法的时间和空间复杂度 9
习题 10
第2章 线性表及其顺序存储 12
2.1 线性表 12
2.2 顺序表 12
2.2.1 顺序表 12
2.2.2 顺序表的实现 13
2.3 栈 18
2.3.1 栈 18
2.3.2 顺序栈及其实现 19
2.3.3 栈的应用之一——括号匹配 21
2.3.4 栈的应用之二——算术表达式求值 23
2.4 队列 28
2.4.1 队列 28
2.4.2 顺序队列及其实现 29
2.4.3 顺序循环队列及其实现 32
习题 34
第3章 线性表的链式存储 35
3.1 链式存储 35
3.2 单链表 36
3.2.1 单链表 36
3.2.2 单链表的实现 37
3.3 带头结点的单链表 43
3.3.1 带头结点的单链表 43
3.3.2 带头结点的单链表的实现 44
3.4 循环单链表 48
3.4.1 循环单链表 48
3.4.2 循环单链表的实现 49
3.5 双链表 56
3.5.1 双链表 56
3.5.2 双链表的实现 57
3.6 链式栈 64
3.6.1 链式栈 64
3.6.2 链式栈的实现 65
3.7 链式队列 67
3.7.1 链式队列 67
3.7.2 链式队列的实现 68
习题 71
第4章 字符串、数组和特殊矩阵 72
4.1 字符串 72
4.1.1 字符串的基本概念 72
4.1.2 字符串类的定义 73
4.1.3 字符串的存储及其实现 74
4.2 字符串的模式匹配 81
4.2.1 朴素的模式匹配算法 81
4.2.2 快速模式匹配算法 82
4.3 数组 85
4.3.1 数组和数组元素 85
4.3.2 数组类的定义 86
4.3.3 数组的顺序存储及实现 86
4.4 特殊矩阵 90
4.4.1 对称矩阵的压缩存储 90
4.4.2 三角矩阵的压缩存储 92
4.4.3 带状矩阵的压缩存储 93
4.5 稀疏矩阵 95
4.5.1 稀疏矩阵类的定义 95
4.5.2 稀疏矩阵的顺序存储及其实现 95
4.5.3 稀疏矩阵的链式存储及实现 98
习题 102
第5章 递归 103
5.1 递归与递归程序设计 103
5.2 递归程序执行过程的分析 105
5.3 递归程序到非递归程序的转换 108
5.3.1 简单递归程序到非递归程序的转换 109
5.3.2 复杂递归程序到非递归程序的转换 112
5.4 递归程序设计的应用实例 116
习题 118
第6章 树型结构 120
6.1 树的基本概念 120
6.2 树类的定义 122
6.3 树的存储结构 123
6.3.1 双亲表示法 123
6.3.2 孩子表示法 124
6.3.3 孩子兄弟表示法 127
6.4 树的遍历 127
6.5 树的线性表示 131
6.5.1 树的括号表示 131
6.5.2 树的层号表示 133
习题 135
第7章 二叉树 137
7.1 二叉树的基本概念 137
7.2 二叉树的基本运算 139
7.3 二叉树的存储结构 140
7.3.1 顺序存储结构 140
7.3.2 链式存储结构 142
7.4 二叉树的遍历 144
7.4.1 二叉树遍历的定义 144
7.4.2 二叉树遍历的递归实现 144
7.4.3 二叉树遍历的非递归实现 146
7.5 二叉树其他运算的实现 150
7.6 穿线二叉树 152
7.6.1 穿线二叉树的定义 152
7.6.2 中序穿线二叉树的基本运算 153
7.6.3 中序穿线二叉树的存储结构及其实现 154
7.7 树、森林和二叉树的转换 156
7.7.1 树、森林到二叉树的转换 156
7.7.2 二叉树到树、森林的转换 157
习题 158
第8章 图 159
8.1 图的基本概念 159
8.2 图的基本运算 162
8.3 图的基本存储结构 163
8.3.1 邻接矩阵及其实现 163
8.3.2 邻接表及其实现 166
8.3.3 邻接多重表 168
8.4 图的遍历 169
8.4.1 深度优先遍历 169
8.4.2 广度优先遍历 171
8.5 生成树与最小生成树 173
8.5.1 最小生成树的定义 174
8.5.2 最小生成树的普里姆(Prim)算法 175
8.5.3 最小生成树的克鲁斯卡尔(Kruskal)算法 178
8.6 最短路径 180
8.6.1 单源最短路径 180
8.6.2 所有顶点对的最短路径 183
8.7 拓扑排序 186
8.8 关键路径 189
习题 194
第9章 检索 196
9.1 检索的基本概念 196
9.2 线性表的检索 197
9.2.1 顺序检索 197
9.2.2 二分法检索 199
9.2.3 分块检索 201
9.3 二叉排序树 203
9.4 丰满树和平衡树 210
9.4.1 丰满树 211
9.4.2 平衡二叉排序树 212
9.5 最佳二叉排序树和Huffman树 218
9.5.1 扩充二叉树 218
9.5.2 最佳二叉排序树 220
9.5.3 Huffman树 225
9.6 B-树 228
9.6.1 B-树的定义 228
9.6.2 B-树的基本操作 229
9.7 散列表检索 234
9.7.1 散列存储 234
9.7.2 散列函数的构造 235
9.7.3 冲突处理 236
习题 240
第10章 内排序 242
10.1 排序的基本概念 242
10.2 插入排序 243
10.2.1 直接插入排序 243
10.2.2 二分法插入排序 246
10.2.3 表插入排序 248
10.2.4 Shell插入排序 249
10.3 选择排序 251
10.3.1 直接选择排序 251
10.3.2 树型选择排序 253
10.3.3 堆排序 256
10.4 交换排序 259
10.4.1 冒泡排序 259
10.4.2 快速排序 261
10.5 归并排序 263
10.6 基数排序 267
10.6.1 多排序码的排序 267
10.6.2 静态链式基数排序 267
习题 271
第11章 外排序 273
11.1 外存储器简介 273
11.1.1 磁盘存储器 273
11.1.2 磁带存储器 273
11.2 文件简介 274
11.2.1 文件的逻辑结构 274
11.2.2 文件的存储结构 274
11.3 外排序——磁盘排序 274
11.3.1 磁盘排序 274
11.3.2 多路归并 276
11.3.3 初始有序串的生成 278
11.4 外排序——磁带排序 279
11.4.1 磁带排序 279
11.4.2 非平衡归并 281
习题 282
第12章 动态存储管理 283
12.1 概述 283
12.2 可利用空间表及分配方法 285
12.3 边界标识法 288
12.3.1 可利用空间表的结构 288
12.3.2 分配算法 289
12.3.3 回收算法 291
12.4 无用单元的收集 293
12.5 存储压缩 296
习题 298
参考文献 299
数据结构(C语言版)
光盘服务联系方式: 020-38250260 客服QQ:4006604884
云图客服:
用户发送的提问,这种方式就需要有位在线客服来回答用户的问题,这种 就属于对话式的,问题是这种提问是否需要用户登录才能提问
Video Player
×
Audio Player
×
pdf Player
×