书籍详情
《数据结构与数据库应用教程》[52M]百度网盘|亲测有效|pdf下载
  • 数据结构与数据库应用教程

  • 出版社:清华大学出版社
  • 出版时间:2019-01
  • 热度:4686
  • 上架时间:2024-06-30 09:08:33
  • 价格:0.0
书籍下载
书籍预览
免责声明

本站支持尊重有效期内的版权/著作权,所有的资源均来自于互联网网友分享或网盘资源,一旦发现资源涉及侵权,将立即删除。希望所有用户一同监督并反馈问题,如有侵权请联系站长或发送邮件到ebook666@outlook.com,本站将立马改正

内容介绍

编辑推荐

本书主要包括两大部分,第一部分为数据结构,包括线性表、栈、队列、串、数组、树和图等,以及查找和排序等操作;第二部分为数据库技术,包括数据库系统概论、关系模型与关系代数,关系数据库标准语言SQL、数据库设计与优化、数据库安全与完整、事务管理与恢复等。

内容简介

  《数据结构与数据库应用教程/高等院校信息技术规划教材》是为“数据结构与数据库”课程编写的教材,也可作为学习数据结构与数据库技术的参考教材。
  《数据结构与数据库应用教程/高等院校信息技术规划教材》的前半部分为数据结构,包括线性表、栈、队列、串、数组、树和图等,以及查找和排序等操作;后半部分为数据库技术,包括数据库系统概述、关系模型与关系代数,关系数据库标准语言(SQL)、数据库设计及优化、数据库安全性与完整性、事务管理与恢复等,最后以一个综合实例介绍了数据库应用系统的开发过程。
  《数据结构与数据库应用教程/高等院校信息技术规划教材》概念清楚,重点突出,内容丰富,结构合理,思路清晰,示例翔实,每章后均附有习题。
  《数据结构与数据库应用教程/高等院校信息技术规划教材》主要面向数据结构与数据库初学者,可作为信息管理与信息系统、计算机及相关专业的本科教学教材,也可供自学计算机基础知识的读者参考。

内页插图

目录

第一部分 数据结构
第1章 绪论
1.1 数据结构的概念
1.1.1 数据结构的范畴
1.1.2 相关概念和术语
1.2 算法和算法分析
1.2.1 算法的基本概念
1.2.2 算法复杂度
小结
习题
第2章 线性表
2.1 线性表的逻辑结构
2.1.1 线性表的定义
2.1.2 线性表的基本操作
2.2 线性表的顺序存储及运算实现
2.2.1 顺序存储的特点
2.2.2 顺序表上的运算实现
2.3 线性表的链式存储及运算实现
2.3.1 链式存储的特点
2.3.2 链表上的运算实现
小结
习题
第3章 特殊线性表
3.1 栈
3.1.1 栈的定义
3.1.2 栈的存储及运算实现
3.2 队列
3.2.1 队列的定义
3.2.2 队列的存储及运算实现
3.3 串
3.3.1 串的定义
3.3.2 串的存储
小结
习题
第4章 数组
4.1 数组的定义
4.2 数组的存储及运算实现
小结
习题
第5章 树与二叉树
5.1 树
5.1.1 树的定义
5.1.2 相关术语
5.2 二叉树
5.2.1 二叉树的定义
5.2.2 二叉树的性质
5.2.3 二叉树的存储结构
5.3 二叉树的遍历
小结
习题
……

精彩书摘

第5章树与二叉树
本章学习目标 掌握树的定义及相关术语。
 理解二叉树的定义及性质。
 了解二叉树的存储结构。
 掌握二叉树遍历的基本方法。

本章介绍的树状结构是一类重要的非线性结构,也是一种分层结构,其中以二叉树最为常用。因为在实际应用中,对于给定的问题,许多是能够抽取层级模型的,而树和二叉树是处理层次模型的典型结构。因此,我们研究树和二叉树的存储与应用是非常有实际意义的。
5.1树〖*4/5〗5.1.1树的定义树是一种简单的非线性结构。在树这种数据结构中,所有数据元素之间的关系具有明显的层次特性。图5.1一般的树
图5.1表示了一棵一般的树。由图5.1可以看出,在用图形表示树这种数据结构时,很像自然界中的树,只不过是一棵倒长的树,因此,这种数据结构就用“树”来命名。
在树的图形表示中,总是认为在用直线连起来的两端结点中,上端结点是前驱,下端结点是后继。这样表示前后继关系的箭头就可以省略。
树(Tree)是n(n≥0)个有限数据元素的集合。当n=0时,称这棵树是空树。在一棵非空树T中:
(1) 有一个特殊的数据元素称为树的根结点,根结点没有前驱结点。
(2) 当n>1时,除根结点之外的其余数据元素被分为m(m>0)个互不相交的集合T1,T2,…,Tm,其中每一个集合Ti(1≤i≤m)本身又是一棵树。树T1,T2,…,Tm称为这个根结点的子树。
从树的定义可以看出,树具有下面两个特点。
(1) 树的根结点没有前驱结点,除根结点之外的所有结点有且只有一个前驱结点。
(2) 树中所有结点可以有零个或多个后继结点。
在现实世界中,能用树这种数据结构表示的例子有很多。例如,图5.2中的树表示了学校行政关系结构。图5.2学校行政层次结构树由于树具有明显的层次关系,因此,树与二叉树都可以用树这种数据结构来描述。在所有的层次关系中,人们最熟悉的是血缘关系,按血缘关系可以很直观地理解树结构中各数据元素结点之间的关系,因此,在描述树结构时,也经常使用血缘关系中的一些术语。
抽象数据类型树的定义如下。ADT Tree {
数据对象D:D是具有相同特性的数据元素的集合。
数据关系R:若D为空集,则称为空树。否则:
(1)在D中存在唯一的称为根的数据元素root;
(2)当n>1时,其余结点可分为m (m>0)个互不相交的有限集T1, T2, …, Tm,其中每一个子集本身又是一棵符合本定义的树,称为根root的子树。
基本操作:P={初始化树,销毁树,插入树,删除树,… }
} ADT Tree树的基本操作有以下几种。
(1) 初始化操作: InitTree (&T)。
初始条件: 树T不存在。
操作结果: 构造空树T。
(2) 销毁操作: DestroyTree (&T)。
初始条件: 树T存在。
操作结果: 销毁树T。
(3) 插入树操作: InsertChild(&T, &p, i, c)。
初始条件: 树T存在。
操作结果: 将以c为根的树插入为结点p的第i棵子树。
(4) 删除树操作: DeleteChild(&T, &p, i)。
初始条件: 树T存在。
操作结果: 删除结点p的第i棵子树。
5.1.2相关术语
下面介绍树这种数据结构中的一些基本术语。
(1) 根结点: 在树结构中,每一个结点只有一个前驱,称为父结点,没有前驱的结点只有一个,称为树的根结点,简称为树的根。例如,在图5.1中,结点A是树的根结点。
(2) 叶子结点: 在树结构中,每一个结点可以有多个后继,它们都称为该结点的子结点。没有后继的结点称为叶子结点。例如,在图5.1中,结点C、E、G、H、I、J均为叶子结点。
(3) 度: 在树结构中,一个结点所拥有的后继个数称为该结点的度。例如,在图5.1中,根结点A的度为3;结点B的度为2;叶子结点的度为0。在树中,所有结点中的最大的度称为树的度。例如,图5.1所示的树的度为3。前面已经说过,树结构具有明显的层次关系,即树是一种层次结构。在树结构中,一般按如下原则分层: 根结点在第1层,同一层上所有结点的所有子结点都在下一层。例如,在图5.1中,根结点A在第1层;结点B、C、D在第2层;结点E、F、G、H在第3层;结点I、J在第4层。树的最大层次称为树的深度。例如,如图5.1所示的树的深度为4。
(4) 孩子、双亲、兄弟: 在树中,以某结点的一个子结点为根构成的树称为该结点的一棵子树。树中某个结点的子树之根称为该结点的孩子,相应地,该结点称为孩子的双亲或父亲。例如,在图5.1中,结点B、C、D是A的孩子;A是B结点的双亲。同一个双亲的孩子称为兄弟,E、F是兄弟,B、C、D是兄弟。
(5) 有序树和无序树: 如果一棵树中结点的各子树之间存在确定的次序关系,称这棵树为有序树;反之,则称为无序树。
5.2二叉树
二叉树是树状结构的另一个重要类型,许多实际问题抽象出来的数据结构往往是二叉树的形式,即使是一般的树也能简单地转换成二叉树。二叉树的结构规律性强,其存储结构及其算法都较为简单,因此,二叉树特别重要。
5.2.1二叉树的定义
二叉树(Binary Tree)是一种很有用的非线性结构,它是n(n≥0)个结点的有限集合,它或者是空集(n=0),或者由一个根结点及两棵互不相交的、分别称为这个根的左子树和右子树的二叉树组成。
二叉树具有以下两个特点。
(1) 非空二叉树只有一个根结点;
(2) 每一个结点最多有两棵子树,且分别称为该结点的左子树与右子树。
图5.3二叉树
由以上特点可以看出,在二叉树中,每一个结点的度最大为2,即所有子树(左子树或右子树)也均为二叉树,而树结构中的每一个结点的度可以是任意的。另外,二叉树中的每一个结点的子树被明显地分为左子树与右子树。在二叉树中,一个结点可以只有左子树而没有右子树,也可以只有右子树而没有左子树。当一个结点既没有左子树也没有右子树时,该结点即是叶子结点。如图5.3所示是一棵深度为4的二叉树。
5.2.2二叉树的性质
二叉树具有下列重要特性。
性质1 在二叉树的第k层上,最多有2k-1个结点。
根据二叉树的特点,这个性质是显然的。
性质2深度为k的二叉树最多有2k-1个结点。
深度为k的二叉树是指二叉树共有k层。根据性质1,只要将第1层到第k层上的最大的结点数相加,就可以得到整个二叉树中结点数的最大值,即1+21+22+…+2k-1=2k-1一棵深度为k且有2k-1个结点的二叉树称为满二叉树。完全二叉树是由满二叉树而引出来的。对于深度为k,有n个结点的二叉树,当且仅当其每一个结点都与深度为k的满二叉树中编号从1至n的结点一一对应时称为完全二叉树。即除第k层外,其他各层 (1~k-1) 的结点数都达到最大个数,第k层所有的结点都连续集中在最左边,这就是完全二叉树。
性质3在任意一棵二叉树中,度为0的结点(即叶子结点)总是比度为2的结点多一个,即n0=n2+1对于这个性质说明如下: 假设二叉树中有n0个叶子结点,n1个度为1的结点,n2个度为2的结点,则二叉树中总的结点数为n=n0+n1+n2(51)在二叉树中除了根结点外,其余每一个结点都有唯一的一个分支进入。设二叉树中所有进入分支的总数为m,则二叉树中总的结点数为n,除了根结点,其余结点都有一个分支进入,即n=m+1。
又由于二叉树中这m个进入分支是分别由非叶子结点射出的,其中度为1的每个结点射出一个分支,度为2 的每个结点射出两个分支,因此,二叉树中所有度为1与度为2的结点射出的分支总数为n1+2n2。而在二叉树中,总的射出分支数应与总的进入分支数相等,即m=n1+2n2,于是得n=n1+2n2+1(52)最后比较式(51)和式(52),有n0+n1+n2=n1+2n2+1化简后得n0=n2+1。
即,在二叉树中,度为0的结点(即叶子结点)总是比度为2的结点多一个。
性质4具有n个结点的完全二叉树的深度为log2n+1。
证明: 设完全二叉树的深度为k,则根据性质2得2k-1≤n<2k,即k-1≤log2n<k,因为k只能是整数,因此,k=log2n+1。
性质5若对含n个结点的完全二叉树从上到下且从左至右进行1~n的编号,则对完全二叉树中任意一个编号为i的结点,有:
(1) 若i=1,则该结点是二叉树的根,无双亲;否则,其双亲结点编号为i/2,其左孩子结点编号为2i,右孩子结点编号为2i+1。
(2) 若2i>n,则该结点无左孩子。
(3) 若2i+1>n,则该结点无右孩子。
5.2.3二叉树的存储结构
二叉树也可以采用两种存储方式: 顺序存储结构和链式存储结构。
二叉树的顺序存储表示可描述为: #define MAX_TREE_SIZE 100//二叉树的最大结点数
typede TElemTypeSqBiTree\[MAX_TREE_SIZE\];//0号单元通常不用
SqBiTree bt;这种存储结构适用于完全二叉树。其存储形式用一组连续的存储单元按照完全二叉树的每个结点“自上而下、从左至右”编号的顺序存放结点内容。一棵完全二叉树(满二叉树)如图5.4所示。
将这棵二叉树存到数组中,相应的下标对应其同样的位置,如图5.5所示。
图5.4完全二叉树示意图
图5.5完全二叉树的顺序存储示意图



根据二叉树的性质5,完全二叉树和满二叉树采取顺序存储方式,树中结点的序号可以唯一地反映出结点之间的逻辑关系,即可以做到唯一复原二叉树。对于一般二叉树,只有将各层空缺处统统补上“虚结点”,其内容为空,才能将其改造成一棵完全二叉树。若空缺结点较多,势必造成空间利用率的下降,使树的插入、删除不便。在这种情况下,就应该考虑使用链式存储结构。
二叉树的链式存储结构中最常用的是二叉链表和三叉链表。二叉链表的每个结点有一个数据域和两个指针域,一个指针指向左孩子,另一个指针指向右孩子。常见的二叉树结点结构及存储结构描述如图5.6所示,二叉链表具有不浪费空间,插入、删除方便等特点。
其中,lchild和rchild是分别指向该结点左孩子和右孩子的指针,data是数据元素的内容。二叉树的链式存储表示可描述为: typedef struct BiTNode {//结点结构
TElemType data;
struct BiTNodelchild, rchild; //左右孩子指针
} BiTNode, BiTree;图5.6二叉链表的存储结构
这种存储结构的特点是寻找孩子结点容易,寻找双亲结点比较困难。因此,若需要频繁地寻找双亲结点,可以给每个结点添加一个指向双亲结点的指针域,便可以采用三叉链表的形式,其结点结构及存储结构描述如图5.7所示。
图5.7三叉链表的存储结构
其中,data是数据域,parent、lchild和rchild都是指针域,分别存放指向双亲、左孩子和右孩子的指针。
5.3二叉树的遍历
遍历指按某条搜索路线遍访每个结点且不重复(又称周游)。它是树结构插入、删除、修改、查找和排序运算的前提,是二叉树一切运算的基础和核心。二叉树是一种非线性的数据结构,在对它进行操作时,总是需要逐一对每个数据元素实施操作,这样就存在一个操作顺序问题。由二叉树的递归定义可知,二叉树是由三个基本单元组成: 根结点、左子树和右子树。由此提出了三种二叉树遍历的搜索路径: 先(根)序遍历,中(根)序遍历,后(根)序遍历。
1. 先序遍历算法的递归描述
先序遍历的递归过程为: 若二叉树为空树,则遍历结束;否则,
(1) 访问根结点;
(2) 先序遍历根结点的左子树;
(3) 先序遍历根结点的右子树。
二叉树先序遍历算法的递归描述为: void Preorder (BiTree T, void( visit)(TElemType& e))
{ if (T) {
visit(T->data); //访问结点
Preorder(T->lchild, visit);//遍历左子树
Preorder(T->rchild, visit);//遍历右子树
}
}2. 中序遍历算法的递归描述
中序遍历的递归过程为: 若二叉树为空树,则遍历结束;否则,
(1) 中序遍历根结点的左子树;
(2) 访问根结点;
(3) 中序遍历根结点的右子树。
二叉树中序遍历算法的递归描述为: void Inorder (BiTree T)
{
if (T) {
Inorder(T->lchild);//遍历左子树
printf(T->data); //访问结点
Inorder(T->rchild);//遍历右子树
}
}3. 后序遍历算法的递归描述
后序遍历的递归过程为: 若二叉树为空树,则遍历结束;否则,
(1) 后序遍历根结点的左子树;
(2) 后序遍历根结点的右子树;
(3) 访问根结点。
二叉树后序遍历算法的递归描述为: void Postorder (BiTree T)
{
if (T) {
Postorder(T->lchild);//遍历左子树
Postorder(T->rchild);//遍历右子树
printf(T->data);//访问结点
}
}可见,遍历二叉树的算法中的基本操作是访问结点,不论按哪一种次序进行遍历,对含n个结点的二叉树,其时间复杂度均为O(n)。
小结
本章主要介绍树、二叉树的概念及遍历方法等。
(1) 树是一种非线性的数据结构,是若干结点的集合,由唯一的根结点和若干棵互不相交的子树构成。其中每一棵子树又是一棵树,也是由唯一的根结点和若干棵互不相交的子树组成的,由此可知: 树的定义是递归的。树的结点数目可以为0,为0的时候是一棵空树。
(2) 树是一种层次数据结构,第一层只有一个结点,称为树根结点,其后每一层都是上一层相应结点的后继结点。每个结点可以有任意多个后继结点,但除树根结点外,每个结点有并且只能有一个前驱结点。树中结点的前驱结点称为该结点的父亲或双亲,后继结点称为该结点的孩子。
(3) 二叉树是一种特殊的树状结构,它的特点是每个结点最多只有两棵子树,并且二叉树的子树有左右之分,其次序不能任意颠倒。
(4) 二叉树的存储结构分为顺序存储结构和链式存储结构两种。顺序存储最适合于完全二叉树,使用顺序存储结构要从数组下标为1开始。
(5) 二叉树的遍历是指按一定的规则和次序访问树中的每个结点,且每个结点只能被访问一次。它包括先序、中序、后序三种不同的遍历次序。
习题
5.1写出如图5.8所示的树的叶子结点、非叶子结点、各结点的度和树深。
5.2已知一棵二叉树如图5.9所示,给出树的先序遍历序列、中序遍历序列和后序遍历序列。
图5.8一般树的示例
图5.9二叉树的示例

前言/序言

  数据结构和数据库技术是信息技术的重要理论技术基础,不仅是高等学校计算机科学与技术类专业学生必修的两门专业基础课程,而且已成为非计算机专业的热门选修课。目前,有关数据结构和数据库技术的书籍有很多。随着课程建设的改革、课时的缩减,如何能使学生在有限的课时里更好地掌握这两门课程,并能在实际的软件开发过程中自觉地应用,一直是摆在广大教师面前的课题。本书结合目前教学的实际情况,梳理了对数据结构与数据库要求的知识点,并形成了便于学习和掌握的相应知识单元,通过大量案例来解释相关的原理及应用技术,注重学生实践能力的培养,内容通俗易懂。本书既可以作为信息管理与信息系统、计算机及相关专业的本科教材,也可供自学计算机基础知识的读者参考。
  全书共15章,分为两大部分。前8章作为第一部分,系统地介绍了数据结构的相关理论及应用。第1章为数据结构绪论,主要介绍数据结构的相关概念和术语、算法的描述与分析方法;第2章为线性表,主要介绍了顺序表和链表的存储表示与实现;第3章为特殊线性表,主要介绍了栈、队列和串的存储表示与实现;第4章为数组,主要介绍了数组的存储表示与实现;第5章为树与二叉树,主要介绍了二叉树的基本知识、性质、存储及遍历应用;第6章为图,主要介绍了图的基本概念、存储及遍历应用;第7章为查找,主要介绍了静态查找、动态查找和哈希表;第8章为排序,主要介绍了直接插入排序、希尔排序、冒泡排序、快速排序、选择排序和归并排序等几种常用的排序算法及性能。第9~15章是第二部分,主要介绍的是数据库技术及其应用。第9章为数据库系统概述,主要介绍了数据、数据库、数据库管理系统和数据库系统等基本概念,数据库处理技术的发展,同时也介绍了数据模型、数据抽象、数据库模式等概念;第10章为关系模型与关系代数,主要介绍了关系数据库实现的基本理论、关系的定义和性质及专门的关系运算方法;第11章为关系数据库的标准语言-SQL,包括数据定义语言、数据控制语言和数据操纵语言;第12章为数据库设计及优化,主要介绍了数据库建模方法,包括概念模型设计过程、如何将概念模型转换为关系模型及关系模式规范化理论等;第13章为数据库安全性与完整性,主要包括数据库安全性、完整性的基本概念和措施,游标、存储过程和触发器的使用;第14章阐述了事务管理和恢复的相关技术,主要包括事务的概念、特性和并发控制,数据库的恢复与备份等;第15章以一个综合实例介绍了数据库应用系统的开发过程。内容讲解由浅入深,层次清晰,通俗易懂。