×
暂无评论
图文详情
  • ISBN:9787030723321
  • 装帧:一般胶版纸
  • 册数:暂无
  • 重量:暂无
  • 开本:其他
  • 页数:288
  • 出版时间:2022-06-01
  • 条形码:9787030723321 ; 978-7-03-072332-1

本书特色

通俗易懂的语言、清晰的书写脉络、完备的补充材料和答案,使这本书无论是作为教科书还是作为自学材料都具备适用性

内容简介

本书系统地介绍了线性表、栈、队列、串、数组、广义表、树、二叉树、图等常用数据结构以及查找、排序、索引等算法设计技术,给出了较多的数据结构应用实例及其算法在计算机中的存储和实现,分析了复杂度。书中各种算法采用C++语言描述,既适合在MSVC下使用,也适合在MSVC++.NET中使用。全书注重程序设计风格,可读性和实用性强。

目录

目录
第1章 绪论 1
1.1 数据结构的研究对象 1
1.2 概念术语 2
1.3 算法和算法描述 9
1.3.1 算法的概念 9
1.3.2 算法的描述方法 9
1.4 算法的评价方法 11
1.4.1 评价算法的准则 11
1.4.2 算法的复杂度 11
1.4.3 算法描写的一些说明 17
本章 小结和学习要点 19
习题1 19
思考题1 21
上机题1 21
实验1 21
第2章 线性表 22
2.1 线性表及其基本操作 22
2.1.1 线性表的逻辑结构定义 22
2.1.2 线性表的抽象数据类型定义 23
2.2 线性表的顺序存储结构——顺序表 25
2.2.1 顺序表的基本表示 25
2.2.2 顺序表的基本操作 28
2.2.3 顺序表下的其他操作 33
2.3 线性表的链式存储结构 35
2.3.1 单链表 35
2.3.2 循环单链表 44
2.3.3 双链表及循环双链表 45
2.3.4 静态链表* 46
2.4 线性表的应用 48
2.4.1 删除整数表中值相同而多余的元素 48
2.4.2 合并两个有序单链表 48
2.4.3 逆置单链表 49
2.4.4 约瑟夫环问题求解 50
2.5 顺序表和单链表的比较 51
2.5.1 时间性能比较 51
2.5.2 空间性能比较 52
本章 小结和学习要点 53
习题2 53
思考题2 57
上机题2 57
实验2 57
第3章 栈和队列 58
3.1 栈 58
3.1.1 栈的逻辑定义 58
3.1.2 顺序栈 58
3.1.3 链栈 63
3.2 队列 66
3.2.1 队列的定义 66
3.2.2 队列的顺序存储结构 66
3.2.3 队列的链式存储结构 70
3.3 栈和队列的应用 73
3.3.1 栈的应用——算术表达式求值 73
3.3.2 队列的应用 75
3.3.3 栈和队列联合应用——停车场管理 78
本章 小结和学习要点 79
习题3 80
思考题3 82
上机题3 82
实验3 82
第4章 字符串 83
4.1 字符串的逻辑结构 83
4.2 字符串的顺序存储结构 84
4.3 字符串的链式存储结构 85
4.4 串的模式匹配算法 86
4.5 字符串的应用 91
4.5.1 大整数加法 91
4.5.2 名字#征数 92
本章 小结和学习要点 92
习题4 92
思考题4 94
上机题4 94
实验4 94
第5章 多维矩阵和广义表 95
5.1 多维矩阵的操作和简单存储 95
5.2 矩阵的压缩存储 98
5.2.1 特殊矩阵的压缩存储 99
5.2.2 稀疏矩阵的压缩存储 102
*5.3 广义表 106
5.3.1 广义表的概念 106
5.3.2 广义表的操作 107
本章 小结和学习要点 108
习题5 108
思考题5 110
上机题5 110
实验5 110
第6章 树和二叉树 111
6.1 树 111
6.2 二叉树 114
6.2.1 二叉树的定义和基本操作 114
6.2.2 二叉树的性质 115
6.2.3 二叉树的存储结构 118
6.3 遍历和建立二叉树 122
6.3.1 遍历二叉树 122
6.3.2 建立和释放二叉链表 126
6.3.3 二叉树的三种遍历的非递归算法 128
6.3.4 二叉树的其他应用算法 130
6.4 树和森林 131
6.5 哈夫曼树及其应用 137
6.6 森林结构的置信度推理 142
本章 小结和学习要点 144
习题6 145
思考题6 149
上机题6 149
实验6 149
第7章 图 150
7.1 图的定义、基本术语和操作 150
7.2 图的存储结构 151
7.2.1 邻接矩阵 151
7.2.2 边数组 152
7.2.3 邻接表 152
7.2.4 图的十字链表 157
7.3 图的遍历 159
7.3.1 深度优先搜索遍历图 159
7.3.2 广度优先搜索遍历图 161
7.3.3 图的遍历 162
7.4 图的连通性和生成树 163
7.5 *小生成树 164
7.5.1 普里姆算法 164
7.5.2 克鲁斯卡尔算法 167
7.6 *短路径问题 169
7.6.1 求单源顶点*短路径的Dijkstra算法 169
7.6.2 求顶点间*短路径的Floyd算法 172
7.7 拓扑排序 174
7.8 求关键路径 175
7.9 图的着色问题 180
7.10 隐式图与启发式搜索 180
本章 小结和学习要点 183
习题7 184
思考题7 188
上机题7 189
实验7 189
第8章 排序 190
8.1 排序的基本概念 190
8.2 插入排序 191
8.2.1 直接插入排序 191
8.2.2 谢尔排序 194
8.3 选择排序 195
8.3.1 直接选择排序 195
8.3.2 堆排序 197
8.4 交换排序 200
8.4.1 胃泡排序 200
8.4.2 快速排序 202
8.5 归并排序 205
8.6 基数排序 207
8.7 各种内排序算法的比较 208
本章 小结和学习要点 211
习题8 212
思考题8 216
上机题8 217
实验8 217
第9章 查找 218
9.1 查找的基本概念和术语 218
9.2 以顺序表为基础的查找 219
9.2.1 顺序表的顺序查找 219
9.2.2 有序表的二分法查找 222
9.2.3 分块查找 226
9.3 树形结构的查找 228
9.3.1 二叉排序树 229
9.3.2 平衡二叉树 236
9.4 散列查找 242
9.4.1 散列查找中的几个主要概念 242
9.4.2 散列函数设计方法 243
9.4.3 冲突的处理方法 246
9.4.4 散列表上的查找算法 249
9.4.5 散列表查找的时间复杂度分析 250
本章 小结和学习要点 253
习题9 253
思考题9 256
上机题9 256
实验9 256
第10章 索引技术 257
10.1 索引的基本概念 257
10.2 线性索引 258
10.2.1 稠密索引 258
10.2.2 稀疏索引 259
10.3 树形索引 260
10.3.1 树 260
10.3.2 B+树 262
10.3.3 键树 263
本章 小结和学习要点 268
习题10 268
思考题10 270
上机题10 270
主要参考文献 271
附录上机实验报告格式 272
展开全部

节选

第1章绪论 本章主要介绍数据结构的研究对象、概念术语、算法描述与评价等基础知识。 1.1数据结构的研究对象 过去,计算机解决的问题主要是以数值计算问题为主。但随着计算机技术的发展,现在计算机所处理的问题大多是如字符、字符串、文本、表格、声音、图形、图像、视频等非数值计算问题为主。为了提高数据处理在查找、插入或删除等操作上的效率,为了提高计算机对现有非数值计算问题的处理能力,需要对其中所出现的数据加以认真分析,提取数据的组织结构,选择合理相应的存储结构,设计相应的算法并加以实现,以求解现实问题。 数据是计算机加工处理的对象。数据的外在表现形式称为数据的逻辑表示,又称为机外表示。数据在计算机存储器中的表示则称为机内表示。数据要能被计算机加工处理,首先必须要能够存储在计算机中,然后才能被计算机程序处理。 数据结构于1968年成为计算机专业一门独立的专业基础课程,主要探讨数据及数据之间的关系、数据上的操作以及数据和数据结构的物理存储表示和操作算法。也就是说,数据结构探讨的是数据的逻辑表示和存储表示,以及相关操作算法的设计和实现。学习数据结构的目的是提高计算机程序处理的效率。 为了说明数据结构研究的数据对象是什么,先看几个例子。 例1-1 学生成绩管理 一个学生成绩信息由学号、姓名、性别、出生曰期和总分等数据组成。通常以表格的形式呈现,如表1-1。每一个学生成绩信息构成一条记录,在表中占一行。若要查看某学生的姓名,需要先给出具有唯一性的学号,然后找到相应的记录,*后才能看到该学号学生相应的姓名。 像这样一类的问题很多,如图书管理、饭卡管理、银行账户管理,等等,这类问题的数学模型都是表格数据的管理,对表格数据进行查、删、改等操作。 在这样的问题中,每个基本单位的数据都是一条一条的记录,数据之间的关系呈现为自然的顺序关系。这种数据对象都称为线性表。 例1-2 人机对弈 在3x3=9的方格棋盘中,甲乙双方轮流落子,当某一方三个棋子同时占有一行、一列或一对角线时为臝,称为二人井字棋对弈。每方在落子时都面对当前的一种棋盘格局,可选不同的落子方案。一旦选定某个落子方案后,对方就面对一个新的格局。每方在对方落子后,相当于在当前格局下选择对己方*有利的格局演化落子。格局之间的演化的关联结构是非线性的:由一个格局可以派生出几个格局,即一方落一个棋子后,对方可选不同的落子方案,不同的走法又形成不同的格局,见图1-1(a),其中,X表示黑方,0表示白方,黑方先行。人机对弈就是让计算机模仿某一方下棋,向获胜方向生成格局。计算机实际生成了一棵对弈解树。格局就是数据元素,数据元素间关系形成一种树形结构。 此外,行政上高校管理机构的设置(见图1-1(b)),数学上算术表达式W*S+(C-D)的图形表示(见图1-1(c)),都是树形结构。 例1-3 教学安排 在学习多门课程时,由于课程之间有一定的先后修次序,所以, 在学习后续课程时,要保证其先导课程已修过,这样,学习起来就比较不费力。表1-2给出了部分课程之间的先后修次序关系。课程之间先后修次序关系可用图1-2中的有向图表示。在学习时,若从课程C,到课程C]之间存在一条有向路径,则C,必须在C]之前先学习。这种问题的解决,对应于为有向图(应该无回路存在)的顶点(表示课程)安排一个符合要求的拓扑序列。 由上述三个例子可见,数据结构的研究对象大多是线性表、树和图等带有一定结构关系的数据模型。 1.2 概念术语 数据结构中涉及的主要概念术语解释如下。 (1)数据(data) 能被计算机接收并处理的对象集合称为数据。因为能被计算机接收并处理的一个对象集合既可以含有一个元素,也可以含有多个元素,所以,数据的概念既可指一个具体的对象,也可指由多个对象组成的对象集合,甚至是所有对象所构成的集合。如一个整数、一个字符、一个字符串、一段声音、一幅图像等都分别是数据;而一个整数集、一个字符集、一个字符串集、多段声音集、多幅图像集甚至视频或者它们全部放在一起组成的集合都是数据。也就是说,数据是个单复数同形的词。一般我们假定数据是由多个对象组成的集合:集口。 (2)信息(information) 具有一定含义或内涵的数据称为信息。数据是信息的载体,信息是数据的表现形式。如图表或图形,它们都是数据加工后的结果,具有一定的含义,通常称之为信息。 (3)数据元素(dataelement)数据中的每个个体或对象称为数据元素。数据元素是数据的基本单位。数据元素既可以是原子数据元素,也可以是结构化数据元素。原子数据元素指该数据元素不可再分,而结构化数据元素则可认为其还能分为若干个组成部分。 (4)数据项(dataitem) 结构化数据元素中所含的有一定意义的成分称为数据项。如学生成绩登记表中,每条记录可看成一个数据元素。一个学生的记录含学号、姓名、各科成绩等成分,这些成分都称为数据项。结构化数据元素由若干个数据项组成。数据项是数据的*小单位。数据项不可再分。能唯一标识数据元素的数据项称为关键字。 (5)数据对象(dataobject) 具体分析研究某个数据结构时所涉及的具有相同性质的数据元素的集合称为数据对象。它是数据的子集。数据对象中的数据元素一般具有相同的类型。例如,一定范围内的整数集合可构成一个数据对象,英文字母的集合也可构成一个数据对象,学生成绩登记表中记录的集合也是一个数据对象。数据对象也简称为数据。 (6)数据结构(datastructure) 由数据对象、数据的逻辑结构、数据的存储结构和操作构成的整体称为数据结构。主要从数据的逻辑结构和数据的存储结构(有时也称为物理结构)两方面来定义数据结构。但人们更多地只从数据的逻辑结构来给出数据结构的定义描述。因而,逻辑上。就把相互之间具有一定联系的数据元素的集合称为数据结构。此时,数据结构就是指数据及其逻辑结构。 ①数据的逻辑结构 指数据结构所用的数据对象中数据元素之间的逻辑关系的整体。逻辑关系通常指数据元素之间的某种邻接关系。数据元素之间可能存在多个逻辑上的联系或关系,例如,在一群人中,可能存在“同学”“朋友”“同事”“同龄”等关系。每一个这种关系都可理解为是某种邻接关系。在研究某个数据结构时,通常只研究某一个具体逻辑关系,暂时不考虑其他逻辑关系。如在研究一群人的逻辑关系时,只考虑“朋友”关系。这样可突出某个重点逻辑关系,忽略次要关系,降低问题的复杂程度。 数据结构逻辑上描述为一个二元组的形式: Data_Structure=(D,R)(1-1) 其中,D表示数据对象,是数据的子集;R表示D上逻辑关系的集合(可能是多个关系),R中的每一元素都表示数据对象D中数据元素之间的一种逻辑关系。一种逻辑关系一般指数据元素逻辑上所遵循的一种“邻接”关系。 ②数据的存储结构 又称数据的物理结构,指数据对象D中数据元素及选定的一个逻辑关系在计算机内存中的映象。数据结构在计算机中的映象包含数据元素的映象和该选定逻辑关系的映象。数据元素的映象称为结点或元素。结构化数据元素中的数据项的映象称为数据域、字段或数据成员。而逻辑关系的映象则取决于所采用的存储方式。 (7)数据结构的映象 数据元素之间的逻辑关系在内存储中的表示称为数据结构的映象。数据结构的映象(mapping)主要有2种:顺序映象和非顺序映象。 ①顺序映象(sequential mapping) 指把逻辑上相邻元素在物理上也相邻存储。 ②非顺序映象(non-sequential mapping) 指把逻辑上相邻元素在物理上不一定相邻存储。有时也可相邻存储。 两种映象对应两种存储结构:顺序存储结构和非顺序存储结构。 (8)数据结构的逻辑结构分类 数据结构按所考虑的数据之间的一种主要逻辑关系可将其划分为4类:集合、线性表、树、图。如图1-3所示。 ①集合 集合是数据元素间没有任何联系的一种数据结构。集合大多都被看成线性结构的一个特例。也可看成树或图结构中任意一种的特例。 ②线性表 在线性表中,每个数据元素至多只有一个直接前驱数据元素和一个直接后继数据元素。一般认为集合、栈、队列和字符串都是特殊线性表。 ③树 在树结构中,根结点无直接前驱数据元素,其他的每个数据元素至多只有一个直接前驱数据元素,但可能有多个直接后继数据元素。树结构是一种层次结构。 ④图 在图结构中,每个结点可能有多个直接前驱数据元素和多个直接后继数据元素。树也可看成是图的特例。 这4种数据结构又可被分成2大类:线性结构和非线性结构。 ①线 性结构在线性结构中,若数据集非空,则数据集中的数据元素可按某种方式一个接一个地排列成唯一的一种有次序的序列。线性表属于线性结构。 ②非线性结构 在非线性结构中,每个数据元素若有的话,可有一个或多个直接前驱数据元素以及一个或多个直接后继数据元素。树、图属于非线性数据结构。 (9)数据结构的存储结构分类 数据结构按存储结构可分为4类:顺序、链式、散列和索引存储结构。 ①顺序存储结构(sequential storage structure) 在顺序存储结构中,逻辑上相邻的数据元素存储在物理上相邻的存储单元里,即用物理存储单元的相邻关系直接体现数据元素之间的逻辑上的邻接关系。在使用时,借助于程序设计语言中的数组(如C++语言中的简单数组、结构数组等)来实现。 ②链式存储结构(linked storagestructure) 在链式存储结构中,逻辑上相邻的数据元素存储在物理上不一定相邻的存储单元里,数据元素之间逻辑上的相邻关系是通过存储单元中附设的指针进行表示的。使用时,借助于程序设计语言中的结构指针来表示。当然,有时也会物理相邻存储。 ③散列存储结构(hash storage structure) 又称哈希存储结构或杂凑存储结构。该结构事先借助程序设计语言开辟一块逻辑上相邻的地址范围连续的存储空间,再建立一个数据元素的关键码到地址的映象函数,称为散列函数或哈希函数。数据元素的存储地址直接由数据元素的关键码计算得到。它在存储数据元素时不考虑数据元素之间逻辑上的相邻关系。逻辑上相邻的数据元素存储在物理上不一定相邻的存储单元里(有时也可相邻)。 ④索引存储结构(indexed storage structure) 在索引存储结构中,它在以主表存储数据元素的同时,还建立主表的附加索引表。数据元素存储的主表称为基本表。基本表中的元素通常“分块有序”,即块内元素按关键字不一定有序(既可有序,也可无序),但块间有序(前一块的*大关键字都小于后一块的*小关键字)。 索引表中每一索引项由基本表所得到的分块中的信息构成,存放的是块内*大关键字和块的起始地址,图1-4给出了一个索引存储结构示意图,其中,基本表分成3块,第0块由下标0、1、2三个元素(记录)构成,第1块由下标3、4、5三个元素(记录)构成,第2块由下标6、7两个元素(记录)构成。块的大小,即所含元素的个数,又称为块的长度,简称为块长。前面两块的块长相同,但*后一块的块长不一定与前面的相同。对于块不等长的情况,索引表的每个索引项在保留块内*大关键字下,相应地要存储块的起始地址和块的终止地址,或者改为块的起始地址和块长。 在这4类存储结构中,顺序存储结构和链式存储结构相对常用,数据结构大多要考虑用这两种存储结构加以存储表示和实现。而散列存储结构和索引存储结构则在较为高级的数据结构应用场合下使用。 这4类存储结构可分为2大类:顺序存储结构和非顺序存储结构。这里所指的顺序主要强调的是,数据之间的逻辑相邻关系在存储位置上是否物理相邻(每个数据元素的存储映象看成

预估到手价 ×

预估到手价是按参与促销活动、以最优惠的购买方案计算出的价格(不含优惠券部分),仅供参考,未必等同于实际到手价。

确定
快速
导航