“数据结构与算法”是计算机学科研究的主题之一。本书采用类C语言描述,系统地介绍了各种数据结构和排序、查找算法。全书共分为9章,主要内容包括数据结构与算法简介、线性表、栈和队列、串、数组及广义表、树和二叉树、图、查找和排序等。对于各种数据结构,本书给出了基本概念、抽象数据类型以及相关的操作,并且对各种算法的运行时间进行了分析。
本书对数据结构中的重点和难点内容进行了深入的剖析,着重培养学生的动手能力,对经典算法、重点算法及应用算法进行了详细的讲解,以使学生更好地掌握数据结构的应用。
本书可作为计算机及相关专业的大学本科教材,也可作为应用型专业以及成人教育、工程技术人员的培训教材。
本书订正了第2版中的笔误、描述不规范等问题,简化了使用不多的内容;每章的编程项目都有完整的C程序实现代码,并都在VC++6.0环境下编译通过,运行正确。
数据结构是计算机科学与技术专业的专业基础课,是十分重要的核心课程。它侧重于体系和思想上的训练,是程序设计的灵魂,为计算机语言课程设计提供了方法性的理论指导,所有的计算机系统软件和应用软件都要用到各种类型的数据结构。算法与数据结构之间存在着相辅相成的关系。解决一个问题既可以选择不同的数据结构,也可以选择不同的算法。数据结构的选择决定了算法执行所需要的时间与空间,影响算法的效率;反之,算法的优劣又决定了某个数据结构是否适合解决这个问题。
全书共分为9章,由浅入深、系统地讨论了各种数据结构的基本概念和相关操作,还介绍了查找和排序算法。各章的具体内容介绍如下。
第1章是绪论,介绍了学习数据结构和算法的意义、数据结构和算法的基本概念,并且指出了数据结构和算法之间的关系,给出了分析算法的方法。
第2章主要介绍了线性表的概念、抽象数据类型及其基本操作,最后列举了一些线性表的应用实例。
第1章 绪论 1
1.1 学习数据结构与算法的意义 1
1.2 数据结构 3
1.3 抽象数据类型 5
1.4 算法 6
1.5 算法分析 9
小结 15
自测题答案 16
编程项目 17
第2章 线性表 18
2.1 线性表的定义 18
2.2 线性表的顺序存储结构 22
2.3 线性表的链式存储结构 29
2.4 线性表的应用 43
小结 46
自测题答案 47
编程项目 48
第3章 栈和队列 49
3.1 栈 49
3.2 栈的应用 55
3.3 队列 67
3.4 队列的应用 76
小结 79
自测题答案 79
编程项目 81
第4章 串 82
4.1 串的定义 82
4.2 串的存储实现 84
4.3 串的模式匹配 88
小结 96
自测题答案 97
编程项目 98
第5章 数组及广义表 99
5.1 数组的定义 99
5.2 数组的顺序存储 101
5.3 矩阵的压缩存储 104
5.4 广义表 115
小结 122
自测题答案 123
编程项目 125
第6章 树和二叉树 126
6.1 树的定义与基本操作 126
6.2 二叉树 129
6.3 树和森林 144
6.4 哈夫曼树与哈夫曼编码 149
小结 157
自测题答案 158
编程项目 160
第7章 图 161
7.1 图的定义 161
7.2 图的存储方式 166
7.3 图的遍历 175
7.4 图的连通性 180
7.5 最小生成树 184
7.6 最短路径 189
7.7 有向无环图的应用 195
小结 204
自测题答案 205
编程项目 209
第8章 查找 210
8.1 线性表上的查找 210
8.2 树上的查找 218
8.3 哈希表 241
小结 252
自测题答案 254
编程项目 257
第9章 排序 258
9.1 插入排序 258
9.2 交换排序 266
9.3 选择排序 271
9.4 归并排序 278
9.5 基数排序 281
9.6 各种内部排序方法比较 283
9.7 外部排序 286
小结 292
自测题答案 293
编程项目 296
附录 各章编程项目参考答案 297
参考文献 391
第1章 绪 论
Data Structure + Algorithm=Program.
Nikiklaus Wirth (1976)
本章初步讲解数据结构与算法,主要明确为什么要学习数据结构与算法、数据结构与算法的基本概念以及如何进行算法分析。
1.1 学习数据结构与算法的意义
1.1.1 学习数据结构的意义
“为什么要学习数据结构?”这是每个初学者都会提出的问题,为了能更好地回答这个问题,首先来看下面两个例子。
例1.1 八皇后问题。这是一个古老而著名的问题。该问题是19世纪著名的数学家高斯于1850年提出的。问题描述:在8×8格的国际象棋盘上摆放着8个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。
这个问题的求解过程不是根据某种确定的计算法则,而是利用试探和回溯技术求解。为了能得到合理的布局,在计算机中要存储布局的当前状态。为了方便起见,以四皇后为例,图1.1给出了计算机存储这些布局的方式。