如何系统而全面地掌握数据结构的解题思路和算法设计思想是学习数据结构课程的难点,而有效理解数据表示和数据处理、正确分析算法设计的要点、建立算法设计思路成为学好本课程的关键。路莹主编的《数据结构》详细介绍了线性表、栈和队列、串、数组和广义表、树和图等数据结构,以及在程序设计过程中经常遇到的查找和排序问题。全书共分9章,每章从典型的实例分析入手,从应用出发,系统地进行理论阐述并配以精确的算法分析与描述,帮助读者快速理解数据结构中的各个知识点、掌握重点内容、突破学习瓶颈,从而使读者更好地应对各种应用需求。
“数据结构”课程是计算机程序设计的重要理论基础,它不仅是计算机专业重要的专业基础课程与核心课程,同时也是信息管理专业以及数学统计专业的主要课程。
路莹主编的《数据结构》共分为9章。第1章绪论,以非数值计算的程序设计解决实际问题为例,说明什么是数据结构,数据结构的研究内容以及相关概念,最后讨论了算法分析;第2~7章分别论述了线性表、栈和队列、串及模式匹配、数组和广义表、树与二叉树、图等基本数据类型以及相关的数据操作。对于典型操作,书中给出了详尽的算法分析过程和算法描述;第8章和第9章讨论了程序设计中常见的查找和排序问题,并就典型方法进行详尽的算法分析和描述。
《数据结构》理论内容阐述详尽,算法分析循序渐进富有逻辑性,算法描述清晰准确,理论知识剖析清楚,且注重解题思路及实用技巧的培养,具有很强的实用性和针对性。书中的算法均采用C语言实现,可直接在任何C环境下调试运行。
本书既可用于高等院校计算机及相关专业的学生学习数据结构课程,也可用于报考计算机专业硕士研究生考试的本科生进行专业课复习,还可以作为相关领域的技术人员和读者自学的参考教材。
第1章 绪论1
1.1 什么是数据结构1
1.2 基本术语4
1.3 算法和算法分析6
1.3.1 算法7
1.3.2 算法设计的要求7
1.3.3 算法效率的度量7
小结9
习题9
第2章 线性表11
2.1 线性表的定义和基本操作11
2.1.1 线性表的定义11
2.1.2 线性表的抽象数据类型12
2.2 线性表的顺序存储结构12
2.2.1 顺序表的结构13
2.2.2 顺序表基本操作的实现14
2.2.3 顺序表的一个简单应用19
2.3 线性表的链式存储结构22
2.3.1 线性链表23
2.3.2 线性链表的一个应用实例29
2.3.3 循环链表和双向链表34
2.3.4 循环链表的一个应用实例37
小结40
习题41
第3章 栈和队列45
3.1 栈45
3.1.1 栈的定义45
3.1.2 栈的抽象数据类型45
3.1.3 栈的表示和实现46
3.2 栈的应用举例513.2.1 数制转换51
3.2.2 括号匹配检测53
3.2.3 表达式求值54
3.2.4 迷宫求解60
3.3 栈与递归66
3.3.1 函数的嵌套调用66
3.3.2 递归调用66
3.4 队列71
3.4.1 队列的定义71
3.4.2 队列的抽象数据类型71
3.4.3 链队列——队列的链式表示和实现72
3.4.4 循环队列——队列的顺序表示和实现75
3.4.5 一个队列的应用实例78
小结83
习题83
第4章 串及模式匹配86
4.1 串类型的定义86
4.2 串的存储结构及其运算87
4.2.1 串的定长顺序存储87
4.2.2 堆的分配存储结构89
4.2.3 串的块链存储结构91
4.3 串的模式匹配91
4.3.1 简单的模式匹配算法92
4.3.2 改进后的模式匹配算法94
4.4 串操作应用举例100
小结107
习题107
第5章 数组和广义表108
5.1 数组的定义和运算108
5.2 数组的顺序存储结构 109
5.3 矩阵的压缩存储110
5.3.1 特殊矩阵110
5.3.2 稀疏矩阵114
5.4 广义表118
5.4.1 广义表的定义118
5.4.2 广义表的运算119
5.5 广义表的存储结构119
小结121
习题121
第6章 树与二叉树122
6.1 树的基本概念122
6.2 二叉树124
6.2.1 二叉树的定义124
6.2.2 二叉树的性质125
6.2.3 二叉树的存储结构126
6.3 遍历二叉树和线索二叉树129
6.3.1 二叉树的遍历方法与算法实现129
6.3.2 二叉树的非递归算法实现131
6.3.3 由遍历序列恢复二叉树135
6.3.4 线索二叉树137
6.4 树和森林138
6.4.1 树的存储表示138
6.4.2 森林与二叉树的转换140
6.4.3 树和森林的遍历142
6.5 哈夫曼树及其应用144
6.5.1 最优二叉树144
6.5.2 哈夫曼编码146
6.6 回溯法与树的遍历149
小结150
习题150
第7章 图152
7.1 图的基本概念152
7.2 图的存储结构及基本操作155
7.2.1 邻接矩阵155
7.2.2 邻接表158
7.2.3 有向图的十字链表162
7.2.4 邻接多重表166
7.3 图的遍历167
7.3.1 深度优先搜索(Depth_First Search)168
7.3.2 广度优先搜索(Breadth_First Search)170
7.4 图的连通性问题174
7.4.1 无向图的连通性174
7.4.2 有向图的连通性174
7.4.3 生成树和生成森林175
7.5 有向无环图及其应用185
7.5.1 拓扑排序186
7.5.2 关键路径192
7.6 最短路径195
7.6.1 从一个源点到其余各顶点的最短路径195
7.6.2 每一对顶点间的最短路径197
小结199
习题199
第8章 查找200
8.1 基本概念200
8.2 静态查找表201
8.2.1 顺序查找201
8.2.2 有序表的查找203
8.2.3 索引顺序表的查找207
8.3 动态查找表 210
8.3.1 二叉排序树210
8.3.2 平衡二叉树221
8.3.3 B-树和B+树230
8.4 哈希表236
8.4.1 哈希表和哈希查找237
8.4.2 常用的哈希函数238
8.4.3 处理冲突的方法241
8.4.4 哈希表的查找及其分析244
小结245
习题245
第9章 内部排序247
9.1 排序的基本概念 247
9.2 插入排序248
9.2.1 直接插入排序248
9.2.2 希尔排序251
9.3 交换排序253
9.3.1 冒泡排序253
9.3.2 快速排序255
9.4 选择排序259
9.4.1 简单选择排序259
9.4.2 堆排序261
9.5 归并排序265
9.6 基数排序267
9.6.1 多关键字排序的算法思想267
9.6.2 链式基数排序268
9.7 各种内部排序算法的比较270
9.7.1 选择排序算法的依据270
9.7.2 选择排序算法的结论270
小结271
习题271