欢迎光临
免费的PDF电子书下载网站

数据结构与算法 C语言版 第3版 PDF下载

编辑推荐

暂无

内容简介

“数据结构与算法”是计算机学科研究的主题之一。本书采用类C语言描述,系统地介绍了各种数据结构和排序、查找算法。全书共分为9章,主要内容包括数据结构与算法简介、线性表、栈和队列、串、数组及广义表、树和二叉树、图、查找和排序等。对于各种数据结构,本书给出了基本概念、抽象数据类型以及相关的操作,并且对各种算法的运行时间进行了分析。

本书对数据结构中的重点和难点内容进行了深入的剖析,着重培养学生的动手能力,对经典算法、重点算法及应用算法进行了详细的讲解,以使学生更好地掌握数据结构的应用。

本书可作为计算机及相关专业的大学本科教材,也可作为应用型专业以及成人教育、工程技术人员的培训教材。

作者简介

暂无

数据结构与算法 C语言版 第3版 PDF下载

目录

第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

前沿

本书订正了第2版中的笔误、描述不规范等问题,简化了使用不多的内容;每章的编程项目都有完整的C程序实现代码,并都在VC++6.0环境下编译通过,运行正确。
数据结构是计算机科学与技术专业的专业基础课,是十分重要的核心课程。它侧重于体系和思想上的训练,是程序设计的灵魂,为计算机语言课程设计提供了方法性的理论指导,所有的计算机系统软件和应用软件都要用到各种类型的数据结构。算法与数据结构之间存在着相辅相成的关系。解决一个问题既可以选择不同的数据结构,也可以选择不同的算法。数据结构的选择决定了算法执行所需要的时间与空间,影响算法的效率;反之,算法的优劣又决定了某个数据结构是否适合解决这个问题。
全书共分为9章,由浅入深、系统地讨论了各种数据结构的基本概念和相关操作,还介绍了查找和排序算法。各章的具体内容介绍如下。
第1章是绪论,介绍了学习数据结构和算法的意义、数据结构和算法的基本概念,并且指出了数据结构和算法之间的关系,给出了分析算法的方法。
第2章主要介绍了线性表的概念、抽象数据类型及其基本操作,最后列举了一些线性表的应用实例。
第3章主要介绍了受限制的线性表,即栈和队列;重点介绍了栈和队列的抽象数据类型及其实现,并列举了几个应用实例。
第4章主要介绍了串这一非数值数据结构,包括串的抽象数据类型及其基本操作与串的模式匹配算法。
第5章介绍了数组这一数据类型在计算机中的存储,重点介绍了稀疏矩阵在计算机中的压缩存储及其操作的实现,同时还介绍了广义表的概念。
第6章讨论了树形结构及其相关算法。
第7章讨论了图形结构及其相关算法。图形结构是一种复杂的数据结构,其应用也非常广泛,该章在介绍了图的遍历算法以后还采用遍历算法推导出了其他常用算法。
第8章讨论了在线性表和树上的查找算法,还介绍了期望查找复杂度为O(1)的哈希表查找算法。
第9章重点介绍了插入排序、选择排序、交换排序、归并排序和基数排序等算法及其思想和分析,在最后还介绍了外部排序算法。
本书示例较多,讲解细致,对数据结构中的重点和难点内容进行了深入的剖析,着重培养学生的动手能力,突出实用性;对经典算法、重点算法及应用算法进行了详细的讲解,以使学生更好地掌握数据结构的应用。本书采用类C语言来描述算法。类C语言是伪码和C语言组合而成的一个描述工具,采用了C语言的核心部分,并为描述方便进行了扩充。
本书可作为计算机及相关专业的大学本科教材,也可作为应用型专业以及成人教育、工程技术人员的培训教材。
本书主要由陈琳琳、李建林任主编,由孙启虎、李橙、郭龙源任副主编。何光明、赵传申、许娟、王珊珊、石雅琴、郑爱琴、许悦、陈珍、陈凤、卢振侠、曹冬梅、杨橙、陈莉萍等人员在内容编写、程序测试、文字校对等工作中也付出了辛勤劳动,在此一并表示衷心的感谢!
本书配有电子教案,并提供程序源代码,以方便读者自学,请到清华大学出版社网站下载。
限于作者水平,书中难免存在不当之处,恳请广大读者批评指正。。
编  者

免费在线读

第1章  绪    论
Data Structure + Algorithm=Program.
Nikiklaus Wirth (1976)
本章初步讲解数据结构与算法,主要明确为什么要学习数据结构与算法、数据结构与算法的基本概念以及如何进行算法分析。
1.1  学习数据结构与算法的意义
1.1.1  学习数据结构的意义
“为什么要学习数据结构?”这是每个初学者都会提出的问题,为了能更好地回答这个问题,首先来看下面两个例子。
例1.1    八皇后问题。这是一个古老而著名的问题。该问题是19世纪著名的数学家高斯于1850年提出的。问题描述:在8×8格的国际象棋盘上摆放着8个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。
这个问题的求解过程不是根据某种确定的计算法则,而是利用试探和回溯技术求解。为了能得到合理的布局,在计算机中要存储布局的当前状态。为了方便起见,以四皇后为例,图1.1给出了计算机存储这些布局的方式。
图1.1  四皇后问题的状态树
如图1.1所示的结构在数据结构中称为树,在四皇后问题中又称为状态树。树的根结点是棋盘布局的最初状态,其余的结点是每一步试探时棋盘的布局状态。只需要遍历这棵树,寻找合理的分支,就可以得到问题的解。
八皇后问题中的状态树就是一种数据结构,它是数据结构中较为常用的树形结构。例 1.1是一个典型的非数值问题,对这些非数值问题的求解不再是数学方程,而是一些诸如树之类的数据结构。由此可以看出,数据结构为研究非数值计算问题提供了数据的表示与操作途径。数据结构是计算机科学与技术专业的专业基础课,是十分重要的核心课程。所有的计算机系统软件和应用软件都要用到各种类型的数据结构。因此,要想更好地运用计算机来解决实际问题,仅掌握几种计算机程序设计语言是难以应付众多复杂课题的。要想有效地使用计算机,充分发挥计算机的功能,还必须学习和掌握好数据结构的有关知识。扎实地打好“数据结构”这门课程的基础,对于学习计算机专业的其他课程,如操作系统、编译原理、数据库管理系统、软件工程及人工智能等都是十分有益的。
学习数据结构的意义
有了数据结构知识,可以帮助我们分析数据的特征和数据之间的关系,从而更好地组织数据,更加有效地使用计算机,充分发挥计算机的功能。
1.1.2  学习算法的意义
算法也是一门很重要的课程,其重要性可以通过例1.2看出。
例1.2    选择问题。设有一组N个数,确定其中的第k个是最大者。
这是一个比较简单的问题。大多数学习过一两门计算机程序设计语言的学生都可以不费劲地写出解决这个问题的程序。例如,一个较直接的解决方法是先将这N个数读进一个数组中,再通过某一简单的算法,如冒泡排序法,将这些数以递减顺序进行排序,然后返回第k个位置上的元素。另一种稍好一点的算法是可以先把前k个数读入数组中并将它们递减排序;接着,将剩下的元素再逐个读入。当新元素被读到时,如果它小于数组中的第k个元素,则忽略;否则就将其放到数组中正确的位置,同时将数组中的一个元素挤出数组,当算法终止时,位于第k个位置上的元素即为所求的元素。
上面的解法都很简单,建议读者可以上机试一试。有了这两个解法后我们就会问:哪一个算法更好?哪个算法更重要?还是这两个算法都好?可以发现,当N增大到1000000,k为500000时,这两个算法在合理的时间范围均不能结束。本书将在第9章讨论另外一种算法,这种算法可以在较短的时间内给出结果。
从上面的例子可以看到,学习和研究算法可以明确分析所得到的算法的好坏,寻找能满足要求的较优算法,从而更加高效地解决问题。
学习算法的意义
学习算法设计的方法和算法分析的技术后,可以帮助我们设计较好的算法,分析算法的优、缺点,从而找出解决某一问题的最好方法。
? 自测题
1. 学习数据结构的意义是什么?
2. 学习算法的意义是什么?
1.2  数 据 结 构
Less than 10% of the code has to do with the ostensible purpose of the system; the rest deals with input-output, data validation, data structure maintenance, and other housekeeping.
Mary Shaw
1.2.1  数据结构概述
数据结构是在整个计算机科学与技术领域广泛使用的术语。它用来反映一个数据的内部构成,即一个数据由哪些成分构成?以什么方式构成?呈现什么样的结构?数据结构有逻辑上的数据结构和物理上的数据结构之分。逻辑上的数据结构反映数据之间的逻辑关系,而物理上的数据结构反映数据在计算机内部的存储安排。数据结构是数据存在的形式。
数 据 结 构
数据结构(data structure)指的是数据之间的相互关系,即数据的组织形式。
1.2.2  基本概念
在系统地学习数据结构之前,首先来了解本课程的基本概念及相关术语的确切含义。
数据(data)是信息的载体,是描述客观事物的数、字符以及所有能输入到计算机中并被计算机程序识别和处理的符号的集合。数据是计算机程序加工的“原料”,共分为两类:数值型数据(主要用于数学计算等)和非数值型数据(文字、图形、图像、音频和视频等)。
数据元素(data element)是数据的基本单位。在不同的条件下,数据元素又可称为元素、结点、顶点、记录等,如八皇后问题中状态树的一个状态。一个数据元素可由不可分割的若干个数据项(data item)组成。例如,在图书馆管理系统中,通常将每本书的信息存储在一个表中,这样一本书的书目信息就为一个数据元素。而书目信息中的每一项,如书名、作者等就称为数据项。数据项是数据不可分割的最小单位。
数据对象(data object)是性质相同的数据元素的集合,是数据的一个子集。例如,整数数据对象是集合Z={0, ±1, ±2, …},字母字符数据对象是集合C={‘A’, ‘B’, …, ‘Z’}。
数据结构(data structure)是指相互之间存在着一种或多种关系的数据元素的集合。在任何问题中,数据元素之间总是存在联系的。把某一数据对象及该数据对象中所有数据成员之间的关系组成的实体叫作数据结构。数据结构有以下4种基本结构。
(1) 集合结构:数据元素之间存在着“属于同一个集合”的关系,如图1.2(a)所示。
(2) 线性结构:数据元素之间存在着“一对一”的关系,如图1.2(b)所示。
(3) 树形结构:数据元素之间存在着“一对多”的关系,如图1.2(c)所示。
(4) 图形结构:数据元素之间存在着“多对多”的关系,如图1.2(d)所示。
图1.2  4类基本数据结构示意图
数据结构的形式定义为
Data_Structure = (D, R)
其中:D是数据元素的有限集;R是D上关系的有限集。
例1.3  定义集合D = {3, 6, 9, 18, 27}的数据结构。
DS1=(D, R1),其中R1定义为D上的“>”(大于)关系,则数据结构DS1可以表示为如图1.3(a)所示的形式。DS2=(D, R2),其中R2定义为D上的“整除”关系,则R2={(3, 3), (3, 6), (3, 9), (3, 18), (3, 27), (6, 18), (9, 18), (9, 27)},数据结构DS2可以表示为如图1.3(b)所示的形式。
图1.3  集合D上定义的两个数据结构
从上面的例子可以看出,即使是由相同元素构成的集合,只要定义的关系不同,也不是同一数据结构。数据结构不仅描述了结构中的元素,还描述了这些元素之间的关系。数据结构的定义仅是对操作对象的一种数学描述,结构中定义的关系是数据元素之间的逻辑关系。
前面已经提到过数据结构可以分为逻辑上的数据结构和物理上的数据结构。数据结构的形式化定义为逻辑结构;物理结构为数据在计算机中的表示,它包括数据元素的表示和关系表示。学过计算机程序设计语言的人都知道,在计算机中表示信息的最小单位是二进制的一位,可以用一个由若干个位组合起来形成的一个位串表示一个数据元素。因此可将这些位串看成数据元素在计算机中的存储形式。
数据元素之间的关系在计算机中有两种不同的表示方法:顺序存储和非顺序存储。因此,就可以得到两种不同的存储结构,即顺序存储结构和链式存储结构。顺序存储结构是把逻辑上相邻的元素存储在物理位置相邻的两个单元中,它是一种最基本的存储方法,一般采用数组来实现。链式存储结构对逻辑上相邻的元素不要求其物理位置也相邻,元素间的逻辑关系通过指针来表示,一般采用链表来实现。图1.4给出了图1.3中数据结构DS1的不同存储方式。

数据结构与算法 C语言版 第3版 pdf下载声明

本pdf资料下载仅供个人学习和研究使用,不能用于商业用途,请在下载后24小时内删除。如果喜欢,请购买正版

pdf下载地址

版权归出版社和作者所有,下载链接已删除。如果喜欢,请购买正版!

链接地址:数据结构与算法 C语言版 第3版