收藏 分享(赏)

第3章算法与数据结构64407.ppt

上传人:dzzj200808 文档编号:5749421 上传时间:2019-03-15 格式:PPT 页数:112 大小:1.12MB
下载 相关 举报
第3章算法与数据结构64407.ppt_第1页
第1页 / 共112页
第3章算法与数据结构64407.ppt_第2页
第2页 / 共112页
第3章算法与数据结构64407.ppt_第3页
第3页 / 共112页
第3章算法与数据结构64407.ppt_第4页
第4页 / 共112页
第3章算法与数据结构64407.ppt_第5页
第5页 / 共112页
点击查看更多>>
资源描述

1、1,第三章算法与数据结构,2,主要内容,3.1 算法 3.2 数据结构 3.3 数据的查找与排序,3,3.1 算法,算法是对特定问题求解步骤的一种描述,它是指令(规则)的有限序列,其中每一条指令表示一个或多个操作。简单地说,算法就是解决问题的操作步骤。,1 算法*,4,解决该问题的算法为:,例3.1 已知圆的半径为R(R是一个可变的量), 求圆的面积和周长?,第一步:输入半经R,第二步:计算面积存入S中,即S=3.14*R2,第三步:计算周长存入L中,即L=2*3.14*R,第四步:输出计算结果S与L的值,5,(4)输出 算法有一个或多个输出,2.算法的基本特征,(1)确定性* 算法中的每一步

2、都必须是有明确的定义,不允许有模棱两可的解释和多义性。,(2)有穷性 必须能在执行有限步骤之后终止。,(3)输入 算法有零个或多个输入,6,例 下列对算法特性描述正错误的是( ),A算法的每一步必须有明确的定义,不允许有多义性,B算法有一定要有输出,C算法一定要有输入,D算法描述的操作都是可以通过执行有限次来实现的,(5)可行性 算法描述的操作都是可以通过已经实现的基本运算,通过执行有限次来实现的。,7,(4)效率与存储量需求:效率指的是算法执行的时间;存储量需求指算法执行过程中所需要的最大存储空间,即:要有较优时间效与空间效率。,3 算法的设计要求,(1)正确性:算法应满足具体问题的需求。,

3、(2)可读性:算法应该有利于阅读者对程序的理解。,(3)健状性:算法应具有容错处理。当输入非法数据时,算法应对其作出反应,而不是产生莫名其妙的输出结果。,8,4. 算法的复杂度*,(1)时间复杂度算法所需要的计算工作量,用算法所执行的基本运算次数(不是执行时间)来度量。,(2)空间复杂度执行这个算法所需要的内存空间。包括:程序所占的空间输入的初始数据所占的空间运算时所需的空间。,9,例1. 算法的时间复杂度是指( ) A)执行算法程序所需要的时间 B)算法程序的长度 C)算法执行过程中所需要的基本运算次数 D)算法程序中的指令条数,例2. 算法的空间复杂度是指( ) A)算法程序的长度 B)算

4、法程序中的指令条数 C)算法程序所占的存储空间 D)算法执行过程中所需要的存储空间,10,例32 将两个变量a和b的值互换 解:算法(引入中间变量c)。 (1) 输入两个数a,b; (2) 把a的值给c; (3) 把b的值给a; (4) 把c的值给b; (5) 输出a,b。,3.1.2 算法的表示,1 自然语言表示用人们通使用的语言来表示。,11,2 流程图*,一种表示算法的图形工具,用几何图框表示各种类型的操作,在框内写上简明的文字或符号表示具体的操作,用箭头的流程表示操作的先后顺序。,起止框,处理框,判断框,输入输出框,连结点,流向线,12,例 输入两个数x、y,输出最大的数,方法1:用自

5、然语言表示:,第二步:如果xy,输出x,否则输出y,13,方法2:用流程图表示:,no,yes,P61页 例3.4 输入三个数x、y、z,输出最大的数,14,一般一个算法可以用顺序、选择和循环三种基本结构组合而成,3 算法的基本结构 *,已经证明:这3种基本结构所构成的程序可以处理任何复杂的问题。,15,例 结构化程序设计的3种基本结构是( ) A)顺序、选择、重复 B)递归、嵌套、调用 C)过程、子过程、主程序 D)顺序、转移、调用,16,(1)列举法 (2)归纳法 (3)递推 (4)递归 (5)减半递推技术,3.1.3 算法设计的基本方法,17,3.2 数据结构,18,3.2.1 基本概念

6、和术语,数据所有能输入到计算机中的描述客观事物的符号。 数据元素数据的基本单位,也称节点或记录,可以包括一个或几个数据项。 数据项有独立含义的数据最小单位,也称域。,学生信息表,以上是用线性表的形式来表示数据,19,以上是通过树形结构来表示数据,20,(1)集合数据元素间除“同属于一个集合”外,无其它关系,根据数据元素间关系的基本特性,数据的逻辑结构有四种:集合、线性结构、树形结构、图状结构,3.2.2 数据的逻辑结构,如:坐在同一个电影院里的观众 如:装在同一袋子里有大米 如:春夏秋冬一年四季,21,(2)线性结构该结构的数据元素之间存在着一个对一的关系,如线性表。,线性结构特点:在数据元素

7、的非空有限集中 *存在唯一的一个被称作“第一个”的数据元素 *存在唯一的一个被称作“最后一个”的数据元素 *除第一个外,集合中的每个元素均只有一个前驱 *除最后一个外,集合中的每个元素均只有一个后继,例:春,夏,秋,冬是一种线性结构; 例:英文字母表(A,B,C,Z)是一线性结构。,22,(3 )树形结构,数据元素之间存在着一对多的关系,它是一类重要的非线性数据结构。,父亲,儿子,女儿,23,(4)图状结构多个对多个,24,2 常见的数据结构*,(1)线性表 线性表是n(n=0)个数据元素构成的有限序列,线性表中除第一个元素以外的每一个元素,有且只有一个前件;除最后一个元素以外的每一个元素,有

8、且只有一个后件。,【例34】26个字母表组成的字母表 (A,B,C,Z),25,(2)栈*栈是限定在一端进行插入与删除的线性表。,26,栈顶指针top,指向实际栈顶 后的空位置,初值为0,进栈,A,出栈,栈满,B,C,D,E,F,设数组维数为M 栈空,此时出栈,则下溢 栈满,此时入栈,则上溢,栈空,栈的特点:先进后出,后进先出。,27,例3.6 假设一个长度为50的数组(数组元素的下标从0到49)作为栈的存储空间,栈底指针bottom指向栈底元素,栈顶指针top指向栈顶元素,如果bottom=49,top=30,则栈中具有 多少个元素。,解:栈中元素的个数=bottom-top+1 所以一共有

9、49-30+1=20 注:书上应加1,28,A)在栈中只能插入元素而不能删除元素 B)在栈中只能删除元素而不能插入元素 C)栈是特殊的线性表,只能在一端插入或删除元素 D)栈是特殊的线性表,只能在一端插入元素,而在另一端删除元素,例1 下列关于栈的描述正确的是( ),例2 栈底至栈顶依次存放元素A、B、C、D、E,在第五个元素E入栈前,栈中元素可以出栈,则出栈序列可能是_。ABCED B. DBCEA C. CDABE D. DCBEA,29,例3.8 有A,B,C,D四个元素,入栈的次序为A、B、C、D,出栈次序任意,不可能得到下面那些出栈序列? (1)A B C D (2)D B C A

10、(3)C D B A (4)C B A D (5)A C B D (6)D B A C (7)A D C B (8)C A B D,方法一:逐一验证求解答案是(2)(6)和(8) 方法二:若进栈的次序是 Pj Pk Pi ,则一定不存在这样的出栈序列 Pi Pj Pk ,30,(3)队列*允许在一端进行插入、而在另一端进行删除的线性表。,front,rear,31,队空,把a1,a2,a3,a4,a5,a6,a7,a8,a9放入队列,a1,a2,a3,a4,a5,a6,a7,a8,a9,入队,出队,队列的特点:先进先出,后进后出,队列在两端进行操作,一端插入,一端删除,32,例1 栈和队列的共

11、同点是( )A)都是先进先出 B)都是后进先出C)只允许在端点处插入和删除元素D)没有共同点,例2 一个队列的入队序列是1,2,3,4,则队列的输出序列是 A)4,3,2,1 B)1,2,3,4 C)1,4,3,2 D)3,2,4,1,33,循环队列的定义,将队列存储空间的最后一个位置绕到第一个位置,形成逻辑上的环状空间,供队列循环使用。,循环队列的基本运算,34,例3.10 容量为25的循环队列,若队头指针front=16,队尾指针rear=9,则循环队列中共有多少个元素? 解:当rearfront时,元素个数rearfront所以一共有:9-6=3个元素。,35,(3)树*,数据元素间存在

12、着一对多或多对一的关系,每个元素若有直接前驱元素,只能有一个,但可以有多个直接后继元素。,36,A,只有根结点的树,有子树的树,根,子树,37,树的基本术语,结点:树中的元素,包括数据项及若干指向其子树的分支。 根:没有前件的结点只有一个,称为树的根结点。 叶子:度为零的结点。 结点的度:结点拥有的子树的个数。 树的度:在树结构中,所有结点的度的最大值称为树的度。 结点的层次:根为第一层,它的孩子为第二层依次类推。 树的高度(深度):树中结点的最大层次数。,38,结点A的度:3 结点B的度:2 结点M的度:0,叶子:K,L,F,G,M,I,J,树的度:3,结点A的层次:1 结点M的层次:4,树

13、的深度:4,39,H,树的高度:,结点K的层次:,树的度:,叶子:,结点A的度:,2,E,I,J,K,H,2,4,4,下列关于树的概念错误的是( ) A一棵树中只有一个无前驱的结点 B一棵树的度为树中各个结点的度数之和 C一棵树中,每个结点的度数之和=结点总数-1 D一棵树中每个结点的度数之和与边的条数相等,40,二叉树,二叉树具有以下两个特点: (1)非空二叉树只有一个根结点。 (2)每个结点最多有二个子树,且分别称左子树和右子树。,二叉树不是树的特特殊情况,主要区别是区分左子树和右子树,即使是在只有一棵树的情况下,也要指明是左子树或右子树。,5 二叉树,两棵不同的二叉树,41,二叉树的基本

14、性质* (1)第k层上最多有2k-1个结点 (2)深度为m的二叉树最多有2m -1个结点 (3)任意一个二叉树中,度为0的结点(叶子结点)总比度为2的点多一个。n0-n2=1 (4)具有n个结点的二叉树,其深度至少为log2n+1,例:在深度为5的二叉树中,结点的个数最多为()A)32 B)31 C)16 D)15,42,满二叉树 除最后一层外,每一层上的所有结点都有两个子结点。,满二叉树的第k层上, 有2k-1个结点,即每一层上的结点都是最大结点数。 深度为m的满二叉树中,共有2m -1个结点。,例3.13 深度为7的满二叉树中,求叶子结点的个数和度为2结点的个数。 解:(1)叶子结点的个数

15、=2k-1= 64个(2)总结点数=27-1=127个度为2结点的个数=叶子结点的个数-1=63个,43,完全二叉树 除最后一层外,每一层上的结点数均达到最大值,在最后一层上只缺少右边的若干结点。,完全二叉树 非完全二叉树,44,二叉树的遍历*不重复地访问二叉树中所有结点。,遍历分三种方式:前序、中序和后序遍历。,1.前序遍历法 首先访问根结点,再访问左子树,最后访问右子树,并且在访问左子树和右子树时,仍然是先访问根,再左子树,最后右子树。,例:用前序法访问:,P,C,F,A,P,H,E,D,G,B,F,C,A,D,B,E,G,H,45,2.中序遍历法 首先访问历左子树,再访问根结点,最后中序

16、右子树。 并且在访问左子树和右子树时,仍然是先访问左子树,再访问根,最后是右子树。,例:用中序法访问:,P,F,C,A,D,B,E,G,H,C,F,A,P,H,E,D,G,B,46,3. 后序遍历 首先后序遍历左子树,再右子树,最后访问根结点,并且在访问左子树和右子树时,仍然是先访问左子树,再访问右子树,最后是根。,例:用后序法访问:,C,F,A,P,H,E,D,G,B,P,F,C,A,D,B,E,G,H,47,例3.14 二叉树中,若前序遍历的结果是adbgcefh,中序遍历的结果是dgbaechf,求后序遍历的结果。,解: 前序遍历 adbgcefh: a是根 中序遍历dgbaechf:左

17、子树的中序是dgb前序遍历dbg:d为左子树的根中序遍历dgb:g和b在d的右子树中前序遍历bg:b是d的右子树根,g是b的左孩子 中序遍历dgbaechf:右子树的中序是echf前序遍历cefh: c为右子树的根。中序遍历echf:e是c的左子树,hf在c的右子树中前序遍历fh: f为c的右子树的根。中序遍历hf:h是f的左子树,a,d,c,b,g,e,f,h,48,已知某二叉树的先序遍历序列为CEDBA,中序遍历序列为DEBAC,则它的后序遍历序列为( )。ADABEC BACBED CDEABC DDECAB,49,4.3.2 数据的存储结构*,逻辑结构可归纳为:线性结构和非线性结构。

18、存储结构是逻辑结构在计算机中的存放方式, 分为:线性存储结构和非线存储性结构,四种存储结构:顺序、链接、索引和散列,不同的存储结构,其数据处理的效率是不同的。,逻辑结构常用的存储结构如下: (1)集合:顺序、链式、索引和散列。 (2)线性表:顺序、链式、索引。栈和队列:顺序、链式存储结构; (3)树:顺序、链式、顺序+链式存储结构 (4)图:顺序、顺序+链式存储结构,50,线性存储结构,存在唯一的第一个数据元素,存在唯一的最后一个的数据元素除第一个外,集合中的每个元素均只有一个前驱除最后一个外,集合中的每个元素均只有一个后继。,非线性存储结构,一个元素可以存在多个直接前驱和多个直接后继,各数据

19、元素之间的前后关系比线性结构复杂。,51,1 顺序存储结构,特点:逻辑相邻的数据元素存储在物理相邻的存储单元里,实现随机存取。主要用于线性结构。(1)线性表中所有数据所占的存储空间是连续的 (2)数据在存储空间中是按逻辑顺序依次存放的。,52,张三 70 70,李四 65 90,王五 68 80,53,14,线性表的插入运算,54,14,线性表的插入运算,55,14,线性表的插入运算,56,14,线性表的插入运算,57,结论: (1)在线性表的末尾进行,即在第n个元素之后插入新元素,则只要增加一个元素即可,不需要移动元素 (2)在线性表的第1个元素之前插入,则需要移动表中n个的元素。 (3)一

20、般情况下,如果在第i个元素之前进行,则第i个元素之后的所有元素都必须移动。 平均情况需要移动表中一半的元素。,线性表的插入运算,58,顺序表的删除运算,59,顺序表的删除运算,60,顺序表的删除运算,61,顺序表的删除运算,62,注意:如果为线性表开辟的存储空间已经满了,不能再插入元素,否则会造成“上溢”错误,1 如果删除第n个元素,则不需要移动其他元素; 2 如果删除第1个元素,则需要移动所有的元素。 3 在一般情况下,若要删除第i个元素,则原来第i个元素之后的所有元素都必须依次往前移动一个位置。 平均要移动表中一半的元素。,顺序表的删除运算,63,顺序存储结构的优缺点* 优点 逻辑相邻,物

21、理相邻 存储空间使用紧凑 可随机存取任一元素 对于小线性表或者元素不常变动的线性表来说是合适的, 因为顺序存储结构比较简单。缺点 插入、删除操作需要移动大量的元素 预先分配空间需按最大空间分配,利用不充分 表容量难以扩充,64,链式存储结构 *,在链式存储方式中,要求每个结点由两部组成: (1)用于存放元素的数值,即数据域; (2)用于存放指针,称为指针域,用于指向前一个或后一个结点的存储位置,存储数据结构的存储空间可以不连续,各数据结点的存储顺序与数据元素之间的逻辑关系可以不一致,而数据元素之间的逻辑关系是由指针域来确定的。,65,顺序存储,链式存储,物理地址不连续,66,链式存储结构的优缺

22、点* 优点 在逻辑上相邻的元素在物理可以不相邻 存储时不用事先准备,用时申请,节约存储空间 对增加,删除接点操作简单,不必移动结点,只要改结点中指针值 缺点 除存储本身信息外,还有表示其直接后继信息的指针域,因此其存储密度小。,67,m,插入元素,210,110,68,删除元素,110,69,双向链表,对线性链表中的每个结点设置两个指针,一个称为左指针,用以指向其前件结点;另一个称为右指针,用以指向其后件结点。,在双向链表中,从某一结点出发,可以很方便找到其他任意一个结点。在对双向链表进行“插入” 和“删除”操作时,需要同时修改两个方向上的指针。,70,循环链表,最后一个结点的指针又指回第一个

23、结点的链表,称为循环链表。,判别链表中最后一个结点的:后继是否为头结点。,71,3 索引存储方法,该方法是在存储结点信息的同时,再建一个附加的索引表,然后利用索引表中索引的值来确定结点的实际存储单元地址。,4 散列存储方法,该方法的基本思想是:把结点的关键字作为自变量,通过散列函数计算规则,确定出结点的存储单元地址。,四种存储方法可以单独使用,可以组合起来使用,同一个逻辑数据结构可以有多种存储结构,且各种存储结构影响数据处理的效率。,72,A一个逻辑数据结构只能有一种存储结构 B数据的逻辑结构属于线性结构,存储结构属于非线性结构 C一个逻辑数据结构可以有多种存储结构,且各种存储结构不影响数据处

24、理效率 D一个逻辑数据结构可以有多种存储结构,且各种存储结构影响数据处理的效率,例2 下列叙述中正确的是( ),例1 从逻辑上可以把数据结构分成() A 动态结构和静态结构 B 紧凑结构和非紧凑结构 C 线性结构和非线性结构 D 内部结构和外部结构,73,A存储空间不一定是连续,且各元素的存储顺序是任意的 B存储空间不一定是连续,且前件元素一定存储在后件元素的前面 C存储空间必须连续,且前件元素一定存储在后件元素的前面 D存储空间必须连续,且各元素的存储顺序是任意的,例3 下列对于线性链表的描述中正确的是(),74,1 顺序查找 从线性表的第一个元素开始,依次将表中的元素与被查元素进行比较,若

25、相等则表示找到(即查找成功);若线性表中所有的元素都与被查元素进行了比较但都不相等,则表示线性表中没有要找的元素(即查找失败)。,3.3 数据的查找与排序,3.3.1 数据的查找 在一个给定的数据结构中查找某个指定的元素。,75,以下2种情况只能采用顺序查找*(1) 无序表(2) 有序线性表,但采用链式存储结构 。,*最坏情况下需要的比较n次,平均次数为(n+1)/2,顺序查找的优点 :算法简单 顺序查找的缺点 :查找效率低,76,只适用于顺序存储的有序表。,2 二分法查找,对长度为n的有序线性表,在最坏情况下,二分查找只需比较log2n次,而顺序查找要比较n次。,77,1 在长度为n的有序线

26、性表中进行二分查找,需要的比较次数为_。2 对长度为n的线性表进行顺序查找,在最坏情况下所需要的比较次数为_。A n+1 B n C (n+1)/2 D n/2,78,将待排序的元素,按大小插入到前面已经排好序的子表中。,3.3.2 数据的排序,1插入排序,79,1插入排序,80,1,1插入排序,81,1,1插入排序,82,1插入排序,83,1插入排序,84,7,1插入排序,85,7,1插入排序,86,1插入排序,87,1插入排序,88,3,1插入排序,89,3,1插入排序,90,1插入排序,91,1插入排序,92,1,1插入排序,93,1,1插入排序,94,1插入排序,95,1插入排序,96

27、,6,1插入排序,97,6,1插入排序,98,1插入排序,99,1插入排序,100,5,1插入排序,101,5,1插入排序,102,1插入排序,最好的情况下,即是有序的情况下,直接插入排序需要比较n-1次;最坏情况下,即是逆序的情况下,直接插入排序需要比较n(n-1)/2次。,103,9 8 6 4 3,8 9 6 4 3,8 6 9 4 3,8 6 4 9 3,8 6 4 3 9,第一轮(趟)把9沉底共比4次,2 交换排序,借助数据元素之间的互相“交换”进行排序的方法。,(1)冒泡排序 通过相邻数据元素的交换逐步将线性表变成有序表。,104,8 6 4 3 9,6 8 4 3 9,6 4 8

28、 3 9,6 4 3 8 9,第二轮(趟)把8沉底共比3次,第三轮(趟)把沉底共比次,第四轮(趟)把沉底共比次,最坏情况下,冒泡排序需要比较的次数是n(n-1)/2次。,105,(2)快速排序,线性中任意取一个数,比如取5,把其放在T变量中,T=5。,把小于T的元素移到T的前面,大于T的元素移到T的后面。,最坏情况下,快速排序要比较的次数是n(n-1) /2次,106,(2)快速排序,107,(2)快速排序,108,(2)快速排序,109,(2)快速排序,110,(2)快速排序,111,3 选择排序 (1)直接选择排序,从无序子序列中“选择”最小或最大的元素,并将它加入到有序子序列中。,最坏情况下,需要比较的次数是n(n-1)/2次,8 3 2 5 9 1 6,1 3 2 5 9 8 6,1 2 3 5 9 8 6,1 2 3 5 9 8 6,1 2 3 5 6 8 9,1 2 3 5 6 8 9,112,(2)堆排序,堆排序适用规模较大的线性表,在最坏情况下,堆排序需要比较的次数为O(n log2n)。堆排序最坏情况下比较次数n(n-1)/2。,下列排序方法中,最坏情况下比较次数最少的是( )。A 冒泡排序 B 简单选择排序 C 直接插入排序 D 堆排序,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 中等教育 > 职业教育

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报