资源预览内容
第1页 / 共18页
第2页 / 共18页
第3页 / 共18页
第4页 / 共18页
第5页 / 共18页
第6页 / 共18页
第7页 / 共18页
第8页 / 共18页
第9页 / 共18页
第10页 / 共18页
亲,该文档总共18页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
第一章第一章 数据结构与算法数据结构与算法1.11.1 算法算法1、算法的基本特征(1)可行性。 (2)确定性。 (3)有穷性。 (4)拥有足够的情报。 *:综上所述,所谓算法算法,是一组严谨地定义运算顺序的规则,并且每一个规则都是有效的,且是明确的,此顺序将在有限的次数下终止。2、算法复杂度主要包括时间复杂度和空间复杂度。(1)算法时间复杂度:指执行算法所需要的计算工作量计算工作量,可以用执行算法的过程中所需基本运算的执执行次数来度量行次数来度量。(2)算法空间复杂度:指执行这个算法所需要的内存空间内存空间。1.21.2 数据结构的基本概念数据结构的基本概念1、数据结构是指相互有关联的数据元素的集合。2、数据结构主:(1) 数据的逻辑结构数据的逻辑结构:是指反映数据元素之间的逻辑关系的数据结构。数据的逻辑结构有两个要素:数据元素的集合,记作 D,数据之间的前后件关系,记作 R,则数据结构 B=(D,R)(2) 数据的数据的存储结构存储结构:在计算机存储空间中的存放形式称为数据的存储结构(也称数据的物理结构)。常用的存储结构有顺序、链接等存储结构。顺序存储顺序存储方式主要用于线性的数据结构,它把逻辑上相邻的数据元素存储在物理上相邻的存储单元里,结点之间的关系由存储单元的邻接关系来体现。链式存储链式存储结构就是在每个结点中至少包含一个指针域,用指针来体现数据元素之间逻辑上的联系。3、数据结构的图形表示在结构图中,没有前件的结点称为根结点,没有后件的结点称为终端结点,也称叶子结点。4、数据结构分为两大类型:线性结构和非线性结构。(1)线性结构(非空的数据结构)条件:1)有且只有一个根结点;2)每一个结点最多有一个前件,也最多有一个后件。*:常见的线性结构有线性表、栈、队列和线性链表等。(2)非线性结构:不满足线性结构条件的数据结构。*:常见的非线性结构有树、二叉树和图等。1.31.3 线性表及其顺序存储结构线性表及其顺序存储结构1、线性表由一组数据元素构成,数据元素的位置只取决于自己的序号,元素之间的相对位置是线性的。线性表是由 n(n0)个数据元素组成的一个有限序列,表中的每一个数据元素,除了第一个外,有且只有一个前件,除了最后一个外,有且只有一个后件。线性表中数据元素的个数称为线性表的长度。线性表可以为空表。*:线性表是一种存储结构线性表是一种存储结构,它的存储方式:顺序和链式。2、线性表的顺序存储结构具有两个基本特点:(1)线性表中所有元素所占的存储空间存储空间是连续的是连续的;(2)线性表中各数据元素在存储空间中是按逻辑顺序依次存放逻辑顺序依次存放的。*:由此可以看出,在线性表的顺序存储结构中,其前后件两个元素在存储空间中是紧邻的,且前件元素一定存储在后件元素的前面,可以通过计算机直接确定第 i 个结点的存储地址。3、顺序表的插入、删除运算(1)顺序表的插入运算:在一般情况下,要在第 i(1in)个元素之前插入一个新元素时,首先要从最后一个(即第 n 个)元素开始,直到第 i 个元素之间共 n-i+1 个元素依次向后移动一个位置,移动结束后,第 i 个位置就被空出,然后将新元素插入到第 i 项。插入结束后,线性表的长度就增加了 1。*:顺性表的插入运算时需要移动元素,在等概率情况下,平均需要移动 n/2 个元素。(2)顺序表的删除运算:在一般情况下,要删除第 i(1in)个元素时,则要从第 i+1个元素开始,直到第 n 个元素之间共 n-i 个元素依次向前移动一个位置。删除结束后,线性表的长度就减小了 1。*:进行顺性表的删除运算时也需要移动元素,在等概率情况下,平均需要移动(n-1)/2 个元素。插入、删除运算不方便。1.41.4 栈和队列栈和队列1、栈及其基本运算栈是限定在一端进行插入与删除运算的线性表。在栈中,允许插入与删除的一端称为栈顶,不允许插入与删除的另一端称为栈底。栈顶元素总是最后被插入的元素,栈底元素总是最先被插入的元素。即栈是按照“先进后出先进后出”或“后进先出”的原则组织数据的。2、队列及其基本运算队列是指允许在一端(队尾)进入插入,而在另一端(队头)进行删除的线性表。尾指针(Rear)指向队尾元素,头指针(front)指向排头元素的前一个位置(队头)。队列是“先进先出先进先出”或“后进后出”的线性表。队列运算包括:1)入队运算:从队尾插入一个元素;2)退队运算:从队头删除一个元素。循环队列及其运算:所谓循环队列,就是将队列存储空间的最后一个位置绕到第一个位置,形成逻辑上的环状空间,供队列循环使用。在循环队列中,用队尾指针 rear 指向队列中的队尾元素,用排头指针 front 指向排头元素的前一个位置,因此,从头指针 front指向的后一个位置直到队尾指针 rear 指向的位置之间,所有的元素均为队列中的元素。*:循环队列中元素的个数=rear-front。1.51.5 线性链表线性链表线表顺序存储的缺点:(1)插入或删除的运算效率很低。在顺序存储的线性表中,插入或删除数据元素时需要移动大量的数据元素;(2)线性表的顺序存储结构下,线性表的存储空间不便于扩充;(3)线性表的顺序存储结构不便于对存储空间的动态分配。1. 线性链表:线性链表:线性表的链式存储结构称为线性链表。在线性链表中用一个专门的指针 HEAD 指向线性链表中第一个数据元素的结点(即存放第一个元素的地址)。线性表中最后一个元素没有后件,因此,线性链表中的最后一个结点的指针域为空(用 Null 或 0 表示),表示链终结。单链表:从表头开始向后扫描链表中的所有结点,而不能从中间或表尾结点向前扫描位于该结点之前的元素。双向链表:对链表中的元素设置两个指针域,一个为指向前件的指针域,称为左指针(LLink),一个为指向后件的指针域,称为右指针(RLink)。2、线性链表的基本运算(1)在线性链表中包含指定元素的结点之前插入一个新元素。*:在线性链表中插入元素时,不需要移动数据元素,只需要修改相关结点指针即可,也不会出现“上溢”现象。(2)在线性链表中删除包含指定元素的结点。*:在线性链表中删除元素时,也不需要移动数据元素,只需要修改相关结点指针即可。3、循环链表及其基本运算在线性链表中,其插入与删除的运算虽然比较方便,但还存在一个问题,在运算过程中对于空表和对第一个结点的处理必须单独考虑,使空表与非空表的运算不统一。为了克服线性链表的这个缺点,可以采用另一种链接方式,即循环链表。与前面所讨论的线性链表相比,循环链表具有以下两个特点:1)在链表中增加了一个表头结点,其数据域为任意或者根据需要来设置,指针域指向线性表的第一个元素的结点,而循环链表的头指针指向表头结点;2)循环链表中最后一个结点的指针域不是空,而是指向表头结点。即在循环链表中,所有结点的指针构成了一个环状链。循环链表的优点主要体现在两个方面:一是在循环链表中,只要指出表中任何一个结点的位置,就可以从它出发访问到表中其他所有的结点,而线性单链表做不到这一点;二是由于在循环链表中设置了一个表头结点,在任何情况下,循环链表中至少有一个结点存在,从而使空表与非空表的运算统一。*:循环链表循环链表是在单链表的基础上增加了一个表头结点,其插入和删除运算与单链表相同。但它可以从任一结点出发来访问表中其他所有结点,并实现空表与非空表的运算的统可以从任一结点出发来访问表中其他所有结点,并实现空表与非空表的运算的统一。一。1.61.6 树与二叉树树与二叉树1、树的基本概念树是一种简单的非线性结构。在树结构中,数据元素之间有着明显的层次结构。在树的图形表示中,用直线连接两端的结点,上端点为前件,下端点为后件。在树结构中,每一个结点只有一个前件,称为父结点父结点。如 A 即为结点 B、C、D 的父结点。没有父结点的结点只有一个,称为根结点。如上图所示,结点 A 即为根结点根结点。每一个结点可以有多个后件,它们均称为该结点的子结点子结点。如结点 G、H、I 是结点 D的子结点。没有后件的结点,称为叶子结点叶子结点。上图中,叶子结点有:J、M、N、L、C、G、H、I。在树结构中,一个结点所拥有的后件结点个数称为该结点的度度。例如,结点 D 的度为3,结点 E 的度为 1 等,按此原则,所有叶子结点的度均为 0。在树中,所有结点中最大的度称为该树的度树的度。上图所示的树中,所有结点中最大的度是 3,所以该树的度为 3。树分层分层,根结点为第一层,往下依次类推。同一层结点的所有子结点均在下一层。如上图:A 结点在第 1 层,B、C、D 结点在第 2 层;E、F、G、H、I 在第 3 层;J、K、L 在第4 层;M、N 在第 5 层。树的最大层次称为树的深度深度。上图树的深度为 5。在树中,某结点的一个子结点为根构成的树称作该结点的子树。叶子结点没有子树。2、二叉树及其基本性质(1)什么是二叉树二叉树二叉树是一种很有用的非线性结构,它具有以下两个特点:1)非空二叉树只有一个根结点;2)每一个结点最多有两棵子树,且分别称为该结点的左子树与右子树。*:根据二叉树的概念可知,二叉树的度二叉树的度可以为 0 0(叶结点)、1 1(只有一棵子树)或 2 2(有2 棵子树)。(2)二叉树的基本性质性质性质 1 1 在二叉树的第 k 层上,最多有 2 2k-1k-1(k1)个结点。性质性质 2 2 深度为 m 的二叉树最多有个 2 2m m-1-1 个结点。性质性质 3 3 在任意一棵二叉树中,度数为度数为 0 0 的结点的结点( (即叶子结点即叶子结点) )总比度为总比度为 2 2 的结点多一个的结点多一个。性质性质 4 4 具有 n 个结点的二叉树,其深度至少为log2n+1,其中log2n表示取 log2n的整数部分。3、满二叉树与完全二叉树满二叉树:除最后一层外,每一层上的所有结点都有两个子结点。完全二叉树:除最后一层外,每一层上的结点数均达到最大值;在最后一层上只缺少右边的若干结点。下图 a 表示的是满二叉树,下图 b 表示的是完全二叉树:完全二叉树还具有如下两个特性:性质性质 5 5 具有 n 个结点的完全二叉树深度为log2n+1。性质性质 6 6 设完全二叉树共有 n 个结点,如果从根结点开始,按层序(每一层从左到右)用自然数 1,2,n 给结点进行编号,则对于编号为 k(k=1,2,n)的结点有以下结论:若 k=1,则该结点为根结点,它没有父结点;若 k1,则该结点的父结点的编号为INT(k/2)。若 2kn,则编号为 k 的左子结点编号为 2k;否则该结点无左子结点(显然也没有右子结点)。若 2k+1n,则编号为 k 的右子结点编号为 2k+1;否则该结点无右子结点。4、二叉树的存储结构在计算机中,二叉树通常采用链式存储结构。与线性链表类似,用于存储二叉树中各元素的存储结点也由两部分组成:数据域和指针域。但在二叉树中,由于每一个元素可以有两个后件(即两个子结点),因此,用于存储二叉树的存储结点的指针域有两个:一个用于指向该结点的左子结点的存储地址,称为左指针域;另一个用于指向该结点的右子结点的存储地址,称为右指针域。*:一般二叉树通常采用链式存储结构,对于满二叉树与完全二叉树来说,可以按层序进行顺序存储注释 1 。5、二叉树的遍历二叉树的遍历是指不重复地访问二叉树中的所有结点。二叉树的遍历可以分为以下三种:(1)前序遍历(DLR):根左右(2)中序遍历(LDR):左根右(3)后序遍历(LRD):左右根1.71.7 查找技术查找技术查找即是指在一个给定的数据结构中查找某个指定的元素。1 1、顺序查找、顺序查找基本思想:从表中的第一个元素开始,将给定的值与表中逐个元素的关键字进行比较,直到两者相符,查到所要找的元素为止。否则就是表中没有要找的元素,查找不成功。在平均情况下,利用顺序查找法在线性表中查找一个元素,大约要与线性表中一半的元素进行比较,最坏情况下需要比较 n 次。顺序查找一个具有 n 个元素的线性表,其平均复
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号