本书使用C语言描述。本书内容涵盖三个方面:①线性结构(线性表,栈和队列,串、数组和广义表)的概念、抽象数据类型的定义、算法描述及其应用;②非线性结构(树与图)的概念、抽象数据类型的定义、算法描述及其应用;③查找与排序的概念、算法描述及其应用。学习数据结构课程的意义在于:让学生了解客观世界问题在计算机外部的表示方法(逻辑结构),及其在计算机内部对应的存储方式(存储结构),以及如何对它们进行运算的计算机解题全过程。
样章试读
目录
- 目录
前言
第1章 绪论 1
1.1 数据结构的研究现状与发展 1
1.1.1 国外的研究现状与发展 1
1.1.2 国内的研究现状与发展 1
1.1.3 数据结构在计算机专业中的地位 2
1.2 什么是数据结构 3
1.3 相关概念 6
1.4 数据类型与抽象数据类型 10
1.5 算法和算法分析 13
1.5.1 算法简述 13
1.5.2 算法的特征 13
1.5.3 算法对应的程序设计模式 14
1.5.4 时间复杂度 19
1.5.5 空间复杂度 22
1.6 数据结构的选择与评价 24
习题 24
第2章 线性表 26
2.1 线性表的概念、存储结构与应用 26
2.1.1 线性表的定义 26
2.1.2 线性表的抽象数据类型定义 26
2.1.3 线性表的存储结构 28
2.1.4 线性表的应用 29
2.2 线性表的顺序存储结构 31
2.2.1 线性表的顺序存储结构定义 31
2.2.2 线性表的顺序存储结构的基本操作 32
2.3 线性表的链式存储结构 37
2.3.1 线性表的链式存储结构定义 37
2.3.2 线性表的链式存储结构的基本操作 38
2.3.3 循环链表、双向链表的存储结构与操作 44
2.4 顺序表与链表的比较 49
2.5 线性表的应用举例 50
2.5.1 一元多项式的线性表的顺序存储结构及特点 50
2.5.2 一元多项式的线性表的链式存储结构 50
习题 56
第3章 栈和队列 60
3.1 栈 60
3.1.1 栈的定义 60
3.1.2 栈的抽象数据类型定义 60
3.1.3 栈的表示和实现 61
3.2 栈的应用 66
3.2.1 数制转换 66
3.2.2 括号匹配 67
3.2.3 运用栈实现行编辑程序 69
3.2.4 迷宫求解 71
3.2.5 表达式求值 77
3.3 栈与递归 83
3.3.1 递归的定义 83
3.3.2 递归过程的内部实现 85
3.3.3 递归消除 86
3.3.4 运用栈阅读递归程序 89
3.4 队列 100
3.4.1 队列的定义 100
3.4.2 队列的抽象数据类型定义 100
3.4.3 队列的表示和实现 101
3.5 队列的应用——离散事件模拟的例子 107
习题 113
第4章 串、数组和广义表 116
4.1 串的基本概念、存储结构与基本操作 116
4.1.1 串的基本概念 116
4.1.2 串的存储结构及算法 120
4.1.3 串的模式匹配算法 128
4.1.4 文本编辑的应用 140
4.2 数组及其应用 144
4.2.1 数组 144
4.2.2 数组的应用——矩阵的压缩存储 149
4.3 广义表的基本概念、抽象数据类型定义与基本操作 165
4.3.1 广义表的基本概念 165
4.3.2 广义表的抽象数据类型定义 166
4.3.3 广义表的表示和实现 167
习题 171
第5章 树和二叉树 175
5.1 树 175
5.1.1 树的定义 175
5.1.2 树的抽象数据类型定义 176
5.2 二叉树 178
5.2.1 二叉树的定义 178
5.2.2 二叉树的抽象数据类型定义 178
5.2.3 二叉树的性质 180
5.2.4 二叉树的存储结构 183
5.3 遍历二叉树 186
5.3.1 问题的提出 186
5.3.2 二叉树遍历算法 187
5.3.3 二叉树遍历递归算法的应用 193
5.4 线索二叉树 198
5.4.1 问题的提出 198
5.4.2 线索二叉树的存储结构 199
5.4.3 二叉树的中序线索化 201
5.5 树和森林 212
5.5.1 树、森林与二叉树的相互转换 212
5.5.2 树和森林的存储 214
5.5.3 树和森林的遍历 217
5.6 哈夫曼树及其应用 219
5.6.1 哈夫曼树 219
5.6.2 哈夫曼编码 222
5.6.3 哈夫曼树的应用 228
习题 229
第6章 图 235
6.1 图的定义、抽象数据类型定义和存储结构 235
6.1.1 图的定义和基本术语 235
6.1.2 图的抽象数据类型定义 240
6.1.3 图的存储结构 241
6.2 图的遍历 246
6.2.1 深度优先搜索递归算法及其阅读 247
6.2.2 广度优先搜索算法及其阅读 259
6.3 生成树与最小生成树 265
6.3.1 Prim算法 266
6.3.2 Kruskal算法 268
6.3.3 破圈法 270
6.3.4 生成树与图的遍历 272
6.4 两点之间的最短路径 273
6.4.1 从某个源点到其余各顶点的最短路径 273
6.4.2 每一对顶点之间的最短路径 278
6.5 有向无环图及其应用 279
6.5.1 拓扑排序 280
6.5.2 关键路径 288
习题 295
第7章 查找 301
7.1 查找的基本概念 301
7.2 静态查找表 302
7.2.1 无序顺序表查找——顺序查找 302
7.2.2 有序顺序表查找——折半查找 304
7.2.3 索引顺序表查找——分块查找 307
7.3 动态查找表 308
7.3.1 二叉排序树 309
7.3.2 平衡二叉树 314
7.4 哈希表 320
7.4.1 什么是哈希表 320
7.4.2 哈希函数的构造方法 321
7.4.3 处理冲突的方法 323
7.4.4 哈希表的查找 330
7.4.5 哈希表实现的比较 331
习题 332
第8章 内部排序 336
8.1 排序的基本概念 336
8.2 插入排序 337
8.2.1 直接插入排序 337
8.2.2 折半插入排序 339
8.2.3 表插入排序 340
8.2.4 希尔排序 342
8.3 交换排序 344
8.3.1 起泡排序 344
8.3.2 快速排序 345
8.4 选择排序 348
8.4.1 简单选择排序 348
8.4.2 堆排序 349
8.5 归并排序 352
8.6 分配排序 355
8.6.1 多关键字排序 355
8.6.2 基数排序 356
8.7 各种内部排序方法的比较 359
习题 360
参考文献 364