
本教材是《21世纪计算机专业大专系列教材》之一。全书共分9章,第1章综述数据、数据结构、算法描述、算法分析,以及数据结构与其他课程之间的关系等。第2章至第7章介绍了基本的数据结构,如线性表、栈、队列、串、数组、广义表、材、二叉树及图等,分别讨论了数据的逻辑结构和存储结构,以及相应运算的算法。第8章和第9章为查找和排序,介绍了常用的几种查找方法和内部排序方法。教材中使用类C语言作为算法描述语言,且所有算法都可以在任何一种C语言的开发环境中实现。在随书的配套光盘中可以看到这些算法的C语言程序。本书中所介绍的数据结构概念清楚,内容丰富。为了有助于学生加深对基础理论知识的理解,培养实际应用的能力,各章(除第1章外)都配有与该章内容相关的操作应用举例,且配有大量习题。本书可作为高等院校计算机专业大专数据结构课程的教材,也可作为非计算机专业本科生的教材。
本书是按照美国电气电子工程师学会(Institute of Electrical and Electronic Engineers, IEEE)和计算机协会(Association for Computing Machinery, ACM)的《计算机学科教学计划2001》的要求编写的。
“数据结构”在计算机科学中是一门综合性的专业基础课。数据结构的研究不仅涉及到计算机硬件(特别是编码理论、存储装置和存取方法等)的研究范围,而且和计算机软件的研究有着更密切的关系,无论是编译程序,还是操作系统,都涉及到数据元素在存储器中的分配问题。在研究信息检索时也必须考虑如何组织数据,以便查找和存取数据元素更为方便。可以认为数据结构是介于数学、计算机硬件和计算机软件三者之间的一门核心课程,是从事计算机科学及其应用的科技工作者必须掌握的重要课程。
本教材作为《21 世纪计算机专业大专系列教材》之一。教材在内容组织和编排上力求体现“先理论,后应用,理论与应用相结合”的原则,强调对理论知识的理解和运用。通过对本课程的学习,掌握各种数据结构的基本概念、逻辑特性和物理表示法,以及相应运算的算法;灵活运用各种数据结构解决实际应用问题,并且为学习后继专业课程打下良好的基础。
全书共分为9章。
第1章综述数据、数据结构、算法描述、算法分析,以及数据结构与其他课程之间的关系等。
第2章至第7章介绍了基本的数据结构,如线性表、栈、队列、串、数组、广义表、树、二叉树及图等,分别讨论了数据的逻辑结构和存储结构,以及相应运算的算法。
第8章和第9章为查找和排序,介绍了常用的几种查找方法和内部排序方法。
本教材有以下主要特点:
(1) 基础理论知识的阐述由浅入深、通俗易懂、逻辑性强。在内容的组织与编排上,略去了一些理论上的推导和繁琐的数学证明。
(2) 为了有助于学生加深对基础理论知识的理解,培养实际应用的能力,各章(除第1章外)都配有与该章内容相关的操作应用举例,且配有大量习题。
(3) 教材中使用类 C 语言作为算法描述语言,且所有算法都可以在任何一种 C 语言的开发环境中实现。在随书的配套光盘中可以看到这些算法的 C 语言程序。
(4) 附录中汇总了本教材各章中介绍的各类数据结构时用到的数据存储结构类型说明,供学生上机实验时参考使用。
本教材讲课时数为 60 学时左右,上机实验时数在 20 学时以上。教师可以根据学时数和学生的实际情况选讲操作应用举例中的例子。
本书可作为高等院校计算机专业大专学生数据结构课的教材,也可作为非计算机专业本科生的教材。
由于作者水平有限,在教材中难免有错误,恳请读者谅解。如果读者有问题需要与作者联系,请发送电子邮件到:pengbo-cau@sina.com
本教材由李大友教授主编和审定,彭波副教授编写。在上机实现教材中所有算法的过程中得到了曾立、许振文等同志的帮助,在此表示感谢。
编著者2001.6
第1章绪论1
1.1数据结构概述1
1.2数据结构的发展概况2
1.3数据结构与其他课程的关系4
1.4基本概念5
1.5算法描述及分析7
1.5.1算法的重要特性7
1.5.2算法的描述方法8
1.5.3算法的设计要求10
1.5.4算法效率的度量10
1.5.5算法的空间需求12
习题12
第2章线性表15
2.1线性表的逻辑结构15
2.1.1线性表的定义15
2.1.2线性表的基本操作16
2.2线性表的顺序存储结构17
2.2.1线性表的顺序存储表示17
2.2.2基本操作在顺序表上的实现18
2.2.3线性表顺序存储结构小结22
2.3线性表的链式存储结构23
2.3.1线性表的链式存储表示24
2.3.2基本操作在单链表上的实现24
2.3.3循环链表28
2.3.4双向链表28
2.3.5线性表链式存储结构小结31
2.4线性表的两种存储结构比较31
2.5线性表操作应用举例32
习题37
第3章栈和队列40
3.1栈40
3.1.1栈的逻辑结构40
3.1.2栈的顺序存储结构41
3.1.3栈的链式存储结构44
3.2队列46
3.2.1队列的逻辑结构46
3.2.2队列的顺序存储结构47
3.2.3队列的链式存储结构50
3.3栈和队列操作应用举例53
习题58
第4章串60
4.1串的逻辑结构60
4.1.1串的定义60
4.1.2串的基本操作61
4.2串的存储结构62
4.2.1定长顺序存储结构62
4.2.2堆分配存储结构65
4.2.3块链存储结构67
4.3串操作应用举例69
习题76
第5章数组与广义表78
5.1数组的逻辑结构78
5.1.1数组的定义78
5.1.2数组的基本操作79
5.2数组的顺序存储结构79
5.3矩阵的压缩存储83
5.3.1特殊矩阵的压缩存储83
5.3.2稀疏矩阵的逻辑结构85
5.3.3稀疏矩阵的存储结构86
5.4广义表91
5.4.1广义表的逻辑结构91
5.4.2广义表的存储结构93
5.5数组与广义表操作应用举例94
习题96
第6章树与二叉树98
6.1树98
6.1.1树的逻辑结构98
6.1.2树的存储结构101
6.2二叉树104
6.2.1二叉树的逻辑结构104
6.2.2二叉树的基本性质107
6.2.3二叉树的存储结构109
6.3遍历二叉树113
6.3.1遍历二叉树的操作定义113
6.3.2遍历二叉树的递归算法114
6.3.3遍历二叉树的非递归算法115
6.3.4建立二叉树的算法121
6.4二叉线索树122
6.4.1二叉线索树的引出122
6.4.2二叉线索树的定义123
6.4.3二叉线索树的存储结构124
6.4.4二叉线索树的操作125
6.5树和森林与二叉树的转换129
6.5.1树与二叉树的转换129
6.5.2森林与二叉树的转换132
6.5.3树和森林的遍历133
6.6赫夫曼树及其应用135
6.6.1基本概念136
6.6.2赫夫曼算法137
6.6.3赫夫曼编码137
6.6.4赫夫曼树和赫夫曼编码的存储表示139
6.6.5赫夫曼编码的算法139
6.6.6示例140
6.7树与二叉树操作应用举例142
习题146
第7章图149
7.1图的逻辑结构149
7.1.1图的定义149
7.1.2图的基本操作149
7.1.3图的基本概念151
7.2图的存储结构154
7.2.1邻接矩阵表示法154
7.2.2邻接表表示法157
7.2.3十字链表表示法160
7.2.4邻接多重表表示法162
7.3图的遍历164
7.3.1深度优先搜索164
7.3.2广度优先搜索165
7.4最小生成树167
7.4.1生成树167
7.4.2最小生成树168
7.5最短路径173
7.5.1求某个源点到其他顶点的最短路径174
7.5.2求每一对顶点之间的最短路径177
7.6拓扑排序179
7.6.1AOV 网179
7.6.2拓扑排序180
7.7关键路径183
7.7.1AOE 网183
7.7.2关键路径的概念184
7.7.3关键路径的算法184
7.8图操作应用举例187
习题191
第8章查找194
8.1基本概念194
8.2静态查找195
8.2.1静态查找的基本操作195
8.2.2静态查找表的顺序存储结构196
8.2.3顺序查找196
8.2.4折半查找197
8.2.5分块查找199
8.3动态查找200
8.3.1动态查找的基本操作200
8.3.2动态查找表的二叉链表存储结构201
8.3.3二叉排序树201
8.3.4二叉平衡树206
8.3.5B 树210
8.4散列表211
8.4.1散列表的概念211
8.4.2散列函数的构造方法213
8.4.3处理冲突的方法216
8.4.4散列表的查找和分析218
8.5查找操作应用举例219
习题221
第9章排序223
9.1基本概念223
9.2插入排序法224
9.2.1直接插入排序224
9.2.2希尔排序225
9.3交换排序法227
9.3.1冒泡排序227
9.3.2快速排序228
9.4选择排序法230
9.4.1直接选择排序231
9.4.2堆排序232
9.5归并排序法237
9.5.1两个有序序列的归并238
9.5.2一趟归并排序238
9.6基数排序法239
9.6.1多关键字排序239
9.6.2链式基数排序240
9.7各种内部排序法的比较244
9.8排序操作应用举例245
习题247
附录数据存储结构综合249
参考文献257