计算机2级公共基础知识-数据结构ppt课件.ppt
计算机等级考试计算机等级考试公共基础知识公共基础知识 计算机二级考试公共基础知识计算机二级考试公共基础知识大纲大纲 q数据结构与算法数据结构与算法q程序设计基础程序设计基础q软件工程基础软件工程基础q数据库设计基础数据库设计基础这四个方面在试卷中出现的情况是:选择题10个(20分),填空题5个(10分),总分值占到了试卷卷面分的30,是一个不小的比例。2计算机二级考试公共基础知识试卷分析计算机二级考试公共基础知识试卷分析 章节章节考试时间考试时间数据结构数据结构与算法与算法程序设程序设计基础计基础软件工软件工程基础程基础数据库设数据库设计基础计基础2007年4月10分2分10分8分2007年9月12分4分8分6分2008年4月10分2分8分10分2008年9月10分2分8分10分2009年3月10分2分8分10分2009年9月10分2分8分10分2010年3月10分0分10分10分3算法算法算法的基算法的基本概念本概念2.2.算法复杂算法复杂度的概念和度的概念和意义意义 一、基本数据结构与算法一、基本数据结构与算法数据结构数据结构数据结构的概念数据结构的概念线性表线性表栈和队列栈和队列树与二叉树树与二叉树查找技术查找技术排序技术排序技术对于等级考试,这个部分的考核对于等级考试,这个部分的考核重点主要重点主要在在算法算法和数据结构和数据结构的基本概的基本概念念、二叉树二叉树(遍历、结点),遍历、结点),还有还有排序和查找排序和查找考试中也经常会涉及到。考试中也经常会涉及到。4算法的定义算法的定义u对解题方案准确而完整的描述称为算法。对解题方案准确而完整的描述称为算法。算法是程序设计的核心算法是程序设计的核心算法的基本概念算法的基本概念 算法是在有限步骤内求解某一问题所使用的一组算法是在有限步骤内求解某一问题所使用的一组定义明确的规则。通俗点说,就是计算机解题的过定义明确的规则。通俗点说,就是计算机解题的过程程(计算的方法计算的方法)。在这个过程中,无论是形成解题。在这个过程中,无论是形成解题思路思路(推理实现的算法推理实现的算法)还是编写程序还是编写程序(操作实现的算操作实现的算法法),都是在实施某种算法。,都是在实施某种算法。例:例:n个数从大到小进行排序。个数从大到小进行排序。有多种排序方法有多种排序方法,常用的有冒泡排序、选择排序等。,常用的有冒泡排序、选择排序等。52.算法的基本特征算法的基本特征一个算法应该具有以下五个重要的特征:一个算法应该具有以下五个重要的特征:n有穷性有穷性n确定性确定性n输入输入n输出输出n可行性可行性一个算法必须保证执行有限步之后结束;算法的每一步骤必须有确切的定义;一个算法有0个或多个输入,以刻画运算对象的初始情况,所谓0个输入是指算法本身设定了初始条件;一个算法有一个或多个输出,以反映对输入数据加工后的结果。没有输出的算法是毫无意义的;算法原则上能够精确地运行,而且人们用笔和纸做有限次运算后即可完成 6u算法与计算机程序算法与计算机程序算法算法_是一组逻辑步骤是一组逻辑步骤程序程序用计算机语言描述的算法用计算机语言描述的算法3.3.算法的表示算法的表示算法的表示算法的表示INPUT rINPUT rS=3.14*r*rS=3.14*r*rPRINT SPRINT S开始开始输入输入R RS=3.14 S=3.14*R*RR*R输出输出S S结束结束问题:输入园的半径,计算园的面积一个算法的表示需要使用一些语言形式。一个算法的表示需要使用一些语言形式。传统的算法传统的算法-图形法,如图形法,如“流程图流程图”和和N-S图图目前常用的方法目前常用的方法-使用伪码描述算法。使用伪码描述算法。74.算法的两个基本要素:算法的两个基本要素:基本运算和操作基本运算和操作基本运算和操作基本运算和操作n算术运算算术运算n关系运算关系运算n逻辑运算逻辑运算n数据传输数据传输控制结构控制结构控制结构控制结构 n顺序顺序n选择选择n循环循环u一是对数据对象的运算和操作;u二是算法的控制结构。u算法基本设计方法:列举法、归纳法、递推、递归、减半递推技术、回溯法 8冒泡排序的方法:冒泡排序的方法:1.扫描整个线性表,逐次对扫描整个线性表,逐次对相邻的两个元素进行比较,相邻的两个元素进行比较,若为逆序,则交换;第一趟若为逆序,则交换;第一趟扫描的结果使最大的元素排扫描的结果使最大的元素排到表的最后到表的最后;2.除最后一个元素,对剩余除最后一个元素,对剩余的元素重复上述过程,将次的元素重复上述过程,将次大的数排到表的倒数第二个大的数排到表的倒数第二个位置;位置;3.重复上述过程;重复上述过程;对于长度为对于长度为n的线性表,冒泡的线性表,冒泡排序需要对表扫描排序需要对表扫描n-1遍。遍。算法举例:算法举例:n个数排序个数排序95.算法评价算法评价评价一个算法优劣的主要标准是算法的执行效率和存储需求:评价一个算法优劣的主要标准是算法的执行效率和存储需求:n时间复杂度:执行这个算法所需要的时间复杂度:执行这个算法所需要的计算工作量计算工作量一般可以用算法在执行过程中所需基本运算的执行次数来度量计算工作量一般可以用算法在执行过程中所需基本运算的执行次数来度量计算工作量n空间复杂度:执行这个算法所需要的空间复杂度:执行这个算法所需要的内存空间内存空间算法在算法在执执行行过过程中程中临时临时占用的存占用的存储储空空间间时间复杂度时间复杂度它大致等于计算机它大致等于计算机执行一种简单操作所需的平均时间执行一种简单操作所需的平均时间与算法中与算法中进行进行简单操作的次数的乘积简单操作的次数的乘积。一个算法在计算机存储器上所占用的存储空间,包括一个算法在计算机存储器上所占用的存储空间,包括存储算法本身所占用存储算法本身所占用的存储空间的存储空间、算法中的输入输出数据所占用的存储空间算法中的输入输出数据所占用的存储空间和和算法在运行过程中算法在运行过程中临时占用的存储空间临时占用的存储空间这三个部分这三个部分10一、算法一、算法uu对解题方案准确而完整的描述称为算法。对解题方案准确而完整的描述称为算法。对解题方案准确而完整的描述称为算法。对解题方案准确而完整的描述称为算法。算法不等于程序,程序的编制不可能优于算法的设计。算法不等于程序,程序的编制不可能优于算法的设计。算法不等于程序,程序的编制不可能优于算法的设计。算法不等于程序,程序的编制不可能优于算法的设计。u算法评价算法评价:n时间复杂度:执行这个算法所需要的计算工作量时间复杂度:执行这个算法所需要的计算工作量n空间复杂度:执行这个算法所需要的内存空间空间复杂度:执行这个算法所需要的内存空间11(1)在在计计算机中,算法是指算机中,算法是指_。A.查询查询方法方法B.加工方法加工方法C.解解题题方案的准确而完整的描述方案的准确而完整的描述D.排序方法排序方法(2)下列叙述中正确的是下列叙述中正确的是(07年年4月月)A)算法的效率只与算法的效率只与问题问题的的规规模有关,而与数据的存模有关,而与数据的存储结储结构无关构无关B)算法的算法的时间时间复复杂杂度是指度是指执执行算法所需要的行算法所需要的计计算工作量算工作量C)数据的数据的逻辑结逻辑结构与存构与存储结储结构是一一构是一一对应对应的的D)算法的算法的时间时间复复杂杂度与空度与空间间复复杂杂度一定相关度一定相关(3)算法的有算法的有穷穷性是指性是指(08年年4月月)A)算法程序的运行)算法程序的运行时间时间是有限的是有限的B)算法程序所)算法程序所处处理的数据量是有限的理的数据量是有限的C)算法程序的)算法程序的长长度是有限的度是有限的D)算法只能被有限的用)算法只能被有限的用户户使用使用(c)(B)算法习题:(A)12(4)算法的算法的时问时问复复杂杂度是指度是指(2010年年3月月)A)算法的算法的执执行行时间时间B)算法所算法所处处理的数据量理的数据量C)算法程序中的算法程序中的语语句或指令条数句或指令条数D)算法在算法在执执行行过过程中所需要的基本运算次数程中所需要的基本运算次数(5)算法的空算法的空间间复复杂杂度是指度是指(09年年9月月)A)算法在)算法在执执行行过过程中所需要的程中所需要的计计算机存算机存储储空空间间B)算法所)算法所处处理的数据量理的数据量C)算法程序中的)算法程序中的语语句或指令条数句或指令条数D)算法在)算法在执执行行过过程中所需要的程中所需要的临时临时工作工作单单元数元数(6)下列叙述中正确的是下列叙述中正确的是(06年年9月月)A)一个算法的空)一个算法的空间间复复杂杂度大,度大,则则其其时间时间复复杂杂度也必定大度也必定大B)一个算法的空)一个算法的空间间复复杂杂度大,度大,则则其其时间时间复复杂杂度必定小度必定小C)一个算法的)一个算法的时间时间复复杂杂度大,度大,则则其空其空间间复复杂杂度必定小度必定小D)上述三种)上述三种说说法都不法都不对对(D)计算工作量(A)(D)13计算机在进行数据处理时,实际需要处理的数据元素一般有很计算机在进行数据处理时,实际需要处理的数据元素一般有很多,而这些大量的数据元素都需要存放在计算机中,因此,大量的多,而这些大量的数据元素都需要存放在计算机中,因此,大量的数据元素在计算机中如何组织,以便提高数据处理的效率,并且节数据元素在计算机中如何组织,以便提高数据处理的效率,并且节省计算机的存储空间,省计算机的存储空间,这是进行数据处理的关键问题。这是进行数据处理的关键问题。二、数据结构二、数据结构程序程序=算法算法+数据结构数据结构数据结构是指相互有关联的数据元素的集合。数据结构是指相互有关联的数据元素的集合。一般来说,人们不会同时处理特征完全不同且互相之间没有任何关系的各类数据元素,对于具有不同特征的数据元素总是分别进行处理。一般情况下,在具有相同特征的数据元素集合中,各个数据一般情况下,在具有相同特征的数据元素集合中,各个数据元素之间存在有某种关系(即联系),这种关系反映了该集元素之间存在有某种关系(即联系),这种关系反映了该集合中的数据元素所固有的一种结构。合中的数据元素所固有的一种结构。14二二.数据结构数据结构数据结构是指相互有关联的数据元素的集合。数据结构是指相互有关联的数据元素的集合。数据结构数据结构是研究数据和数据之间关系的一门是研究数据和数据之间关系的一门学科,它包括三个方面。学科,它包括三个方面。(1)数据集合中各数据元素之间所固有的逻)数据集合中各数据元素之间所固有的逻辑关系,即数据的逻辑结构;辑关系,即数据的逻辑结构;(2)在对数据进行处理时,各数据元素在计)在对数据进行处理时,各数据元素在计算机中的存储关系,即数据的存储结构;算机中的存储关系,即数据的存储结构;(3)对各种数据结构进行的运算。)对各种数据结构进行的运算。15u1.逻辑结构逻辑结构数据的逻辑结构是指反映数据元素之间逻辑关系的数据结构。数据的逻辑结构是指反映数据元素之间逻辑关系的数据结构。数据的逻辑结构包含:数据的逻辑结构包含:(1)表示数据元素的信息;)表示数据元素的信息;(2)表示各数据元素之间的前后件关系。)表示各数据元素之间的前后件关系。例:例:1.一年四季的数据结构一年四季的数据结构B=(D,R)D=春,夏,秋,冬春,夏,秋,冬R=(春,夏春,夏),(夏,秋夏,秋),(秋,冬秋,冬)2.家庭成员的数据结构家庭成员的数据结构B=(D,R)D=父亲,儿子,女儿父亲,儿子,女儿R=(父亲,儿子父亲,儿子),(父亲,女儿父亲,女儿)春夏秋冬数据结构的图形表示数据结构的图形表示父亲儿子女儿16u常见的常见的逻辑结构逻辑结构有:有:线性结构、树形结构和图形结构。线性结构、树形结构和图形结构。线性结构线性结构树形结构树形结构图图形形结结构构u线性结构线性结构结构中的每个元素之间存在一个对一个的关系;结构中的每个元素之间存在一个对一个的关系;u树形结构树形结构结构中的每个元素之间存在一个对多个的关系;结构中的每个元素之间存在一个对多个的关系;u图形结构或网状结构图形结构或网状结构结构中的每个元素之间存在多个对多个的关系。结构中的每个元素之间存在多个对多个的关系。其中,其中,树形结构和图形结构统称为非线性结构树形结构和图形结构统称为非线性结构。数据的逻辑结构可以。数据的逻辑结构可以用二元关系表示,也可以直观地用图形来表示。用二元关系表示,也可以直观地用图形来表示。17u2.存储结构(物理结构存储结构(物理结构)计算机在实际进行数据处理时,被处理的各数据元素总是被存放在计算计算机在实际进行数据处理时,被处理的各数据元素总是被存放在计算机的存储空间中,并且,各数据元素在计算机存储空间中的位置与它机的存储空间中,并且,各数据元素在计算机存储空间中的位置与它们的逻辑关系不一定是相同的,而且一般也不可能相同。们的逻辑关系不一定是相同的,而且一般也不可能相同。如:如:一年四季 家庭成员 计算机存储空间怎样存放?存储结构指数据结构在计算机存储空间中的具体实现。存储结构指数据结构在计算机存储空间中的具体实现。常见的存储结构有:常见的存储结构有:n顺序存储结构顺序存储结构n链式存储结构链式存储结构n索引存储结构存储结构只抽象地反映数据元素之间的关只抽象地反映数据元素之间的关系的结构,而不管其存储方式的系的结构,而不管其存储方式的数据结构称为逻辑结构。数据结构称为逻辑结构。一种一种数据结构可以根据需要表示数据结构可以根据需要表示成一种或多种存储结构成一种或多种存储结构。18u3.数据的运算数据的运算n检索检索n插入插入n删除删除n更新更新n排序排序 通常,一个数据结构中的元素结点可能是动态变化的。根通常,一个数据结构中的元素结点可能是动态变化的。根据需要或在处理过程中,可以在一个数据结构中增加一个新结据需要或在处理过程中,可以在一个数据结构中增加一个新结点(插入运算),也可以删除某个结点(删除运算),除此之点(插入运算),也可以删除某个结点(删除运算),除此之外,对数据结构的运算还有查找、分类、合并、分解、复制和外,对数据结构的运算还有查找、分类、合并、分解、复制和修改。修改。在对数据结构的处理过程中,不仅数据结构中结点的个数在对数据结构的处理过程中,不仅数据结构中结点的个数在动态变化,而且,各数据元素之间的关系也有可能在动态地在动态变化,而且,各数据元素之间的关系也有可能在动态地变化。变化。如:无序表变有序表数据结构是研究数据和数据之间数据结构是研究数据和数据之间关系的一门学科,研究以下三方面关系的一门学科,研究以下三方面内容:内容:n数据的逻辑结构数据的逻辑结构n数据的存储结构数据的存储结构n数据的运算数据的运算19下一页上一页停止放映常见的数据结构常见的数据结构 1.线性表线性表 2.栈和队列栈和队列 3.树树2020 线性表(线性表(线性表(线性表(LinearListLinearList)线性表是由线性表是由n(n0)个数据元素)个数据元素a1,a2,ai,an组成的一个有限序列。组成的一个有限序列。简单的线性表简单的线性表简单的线性表简单的线性表春春夏夏秋秋冬冬复杂的线性表复杂的线性表复杂的线性表复杂的线性表记录记录102011001张三张三男男记录记录202011003李四李四女女记录记录3记录记录421线性表的顺序存储结构线性表的顺序存储结构线性表的顺序存储结构线性表的顺序存储结构顺序存储结构把顺序存储结构把逻辑上相邻逻辑上相邻的的数据元素存储在数据元素存储在物理上相邻物理上相邻的存储的存储单元里,顺序存储结构单元里,顺序存储结构只存储结点只存储结点的值的值,不存储结点间的关系,结点,不存储结点间的关系,结点间的关系由存储单元的邻接关系来间的关系由存储单元的邻接关系来体现。体现。a1a2aian存储地址存储地址200020042000+4*(i-1)2000+4*(n-1)占占4个字节个字节LoaLoa(a ai i)=Loa=Loa(a a1 1)+L*+L*(i-1i-1)第i个数的地址第一个数的地址L为该类型数所占的字节线性表的存储结构线性表的存储结构线性表的存储结构有两种:线性表的存储结构有两种:u顺序存储结构顺序存储结构u链式存储结构链式存储结构22顺序表的插入和删除运算顺序表的插入和删除运算顺序表的插入和删除运算顺序表的插入和删除运算在线性表顺序存储情况下,要插入或删除一个元在线性表顺序存储情况下,要插入或删除一个元素,都会由于数据元素的移动而消耗大量的处理时间,素,都会由于数据元素的移动而消耗大量的处理时间,所以这种存储方式对于小线性表或其中数据元素不经所以这种存储方式对于小线性表或其中数据元素不经常变动的线性表是合适的。常变动的线性表是合适的。线性表的顺序存储结构称为顺序表。线性表的顺序存储结构称为顺序表。23顺序表的插入运算顺序表的插入运算在第在第i个数据元素之前插入一个新的元素个数据元素之前插入一个新的元素思想思想:1.将第将第n到到i个元素均向后移动一个位置。个元素均向后移动一个位置。2.将新元素放置在第将新元素放置在第i个位置。个位置。a1ai-1-1aian例,在第例,在第i个元素前插入个元素前插入ba1ai-1-1aianb24例,例,在第在第4个元素之前插入元素个元素之前插入元素25。451293369512345657693325插入插入2525顺序表的删除运算顺序表的删除运算删除第删除第i个数据元素个数据元素思想思想:a1ai-1-1ai+1ana1ai-1-1ai+1anai1.删除第删除第i个数据元素。个数据元素。2.将第将第i+1到到n个元素均向前移动一个位置。个元素均向前移动一个位置。26例,例,删除第删除第4个元素个元素25。删除删除2545129253369123456753369527线性表的链式存储结构线性表的链式存储结构线性表的链式存储结构线性表的链式存储结构u线性表的链式存储结构称为线性链表。线性表的链式存储结构称为线性链表。u链式存储结构不要求逻辑上相邻的数据元素物理位链式存储结构不要求逻辑上相邻的数据元素物理位置也相邻,而且各数据元素的存储顺序也是任意的。置也相邻,而且各数据元素的存储顺序也是任意的。各数据元素的先后关系是由各结点的指针域指示。各数据元素的先后关系是由各结点的指针域指示。u链式存储结构的每一个存储结点不仅存储结点的值,链式存储结构的每一个存储结点不仅存储结点的值,而且存储结点之间的关系:而且存储结点之间的关系:数据域数据域指针域指针域28应用举例应用举例应用举例应用举例线性链表的存储结构线性链表的存储结构线性链表的存储结构线性链表的存储结构设线性表为设线性表为(a1,a2,a3,a4,a5)1a2923a1145a4106789a3510a50HEAD3a1a2a5a3a4HEAD319510线性链表的逻辑状态线性链表的逻辑状态线性链表线性链表的物理状态的物理状态1 a12 a23 a34 a45 a567线性表的线性表的线性表的线性表的顺顺顺顺序存储序存储序存储序存储结构结构结构结构注意:1 2 3 此类编号不代表所在的地址单元的地址编码29线性链表的插入和删除运算线性链表的插入和删除运算线性链表的插入和删除运算线性链表的插入和删除运算采用链式存储结构,存储空间开销较大,但是进行插采用链式存储结构,存储空间开销较大,但是进行插入和删除运算不会造成大量元素的移动。入和删除运算不会造成大量元素的移动。30优点优点:数据元素的数据元素的插入、删除插入、删除相对方便相对方便在在a,b之间插入元素之间插入元素x:abpxss-next=p-nextp-next=s31删除元素删除元素b:acpbq=p-nextp-next=p-next-next?1)p-next=q-nextq=p-next2)3)free(q);32循环链表是另一种形式的链式存储结构。它的特点是循环链表是另一种形式的链式存储结构。它的特点是表中最后一个结点的指针域指向头结点。表中最后一个结点的指针域指向头结点。a1a2a5a3a4HEAD31951033双向链表的存储结构 提问:单向链表的缺点是什么?提示:如何寻找结点的直接前趋。双向链表可以克服单链表的单向性的缺点。在双向链表的结点中有两个指针域,其一指向在双向链表的结点中有两个指针域,其一指向直接后继,另一指向直接前趋。直接后继,另一指向直接前趋。HEAD31510a2a3a4a1双向循环链表双向循环链表 34线性表的存储结构有两种线性表的存储结构有两种线性表的存储结构有两种线性表的存储结构有两种u顺序存储结构顺序存储结构注意:注意:n数据元素在计算机数据元素在计算机存储空间中的位置关存储空间中的位置关系与它们的逻辑关系系与它们的逻辑关系不一定是相同的。不一定是相同的。n一个逻辑数据结构一个逻辑数据结构可以有多种存储结构,可以有多种存储结构,且不同的存储结构影且不同的存储结构影响数据处理的效率响数据处理的效率。1a2923a1145a4106789a3510a50HEAD31 a12 a23 a34 a45 a567u链式存储结构链式存储结构线性表线性表:a1,a2,a3,a4,a5352.栈和队列栈和队列栈和队列都是特殊的线性表。栈和队列都是特殊的线性表。uu 栈(栈(栈(栈(StackStack)及其基本运算)及其基本运算)及其基本运算)及其基本运算uu 队列(队列(队列(队列(QueueQueue)及其基本运算)及其基本运算)及其基本运算)及其基本运算uu 循环队列及其基本运算循环队列及其基本运算循环队列及其基本运算循环队列及其基本运算36栈(栈(栈(栈(StackStack)是一种特殊的是一种特殊的线性表线性表。其特点是插入和删。其特点是插入和删除运算都只能在线性表的一端进行。除运算都只能在线性表的一端进行。u栈是按照栈是按照“先进后出先进后出先进后出先进后出”或或“后进先出后进先出后进先出后进先出”的原则组织数的原则组织数据的线性表。据的线性表。u栈的物理存储结构可以用顺序结构,也可以用链表结栈的物理存储结构可以用顺序结构,也可以用链表结构。构。u下面讨论顺序存储结构中栈元素的插入和删除运算。下面讨论顺序存储结构中栈元素的插入和删除运算。n栈的基本运算有三种:入栈、退栈和读栈顶元素栈的基本运算有三种:入栈、退栈和读栈顶元素在顺序栈中插入和删除运算不需要在顺序栈中插入和删除运算不需要移动表中其他数据元素移动表中其他数据元素。37入栈操作top空栈空栈:top=-1MaxTop=3topAtopABABCtoptopABCD312038出栈操作012maxSize-1topba012maxSize-1topbac39队列(队列(队列(队列(QueueQueue)是一种特殊的线性表。其特点是所有的是一种特殊的线性表。其特点是所有的插入都在表的一端插入都在表的一端进行,所有的进行,所有的删除删除运算都在表的运算都在表的另另一端一端进行。进行。u队列是按照队列是按照“先进先出先进先出先进先出先进先出”或或“后进后出后进后出后进后出后进后出”的原则组织的原则组织数据的线性表。数据的线性表。u队列的物理存储结构可以用顺序结构,也可以用链式队列的物理存储结构可以用顺序结构,也可以用链式结构。结构。40队列的基本操作(顺序存储结构)用一组地址连续的存储单元依次存放从队头到队尾的元素。front=-1front=-1rear=-1rear=-11 12 23 34 45 50 0队空队空1 12 23 34 45 50 0frontfrontJ1,J2,J3J1,J2,J3入队入队J1J1J2J2J3J3rearrearrearrear1 12 23 34 45 50 0J4,J5,J6J4,J5,J6入队入队J4J4J5J5J6J6frontfront设两个指针设两个指针front,rear,front,rear,约定:约定:rearrear指示队尾元素;指示队尾元素;frontfront指示队头元素前一位置指示队头元素前一位置初值初值front=rear=-1front=rear=-1空队列条件:空队列条件:front=rearfront=rear入队列:入队列:sq+rear=x;sq+rear=x;出队列:出队列:x=sq+front;x=sq+front;rearrearrearrearfrontfrontrearrear1 12 23 34 45 50 0J1,J2,J3J1,J2,J3出队出队J1J1J2J2J3J3frontfrontfrontfrontfrontfrontq存在问题存在问题(设数组大小为设数组大小为M)M),则:则:v当当front=-1,rear=M-1front=-1,rear=M-1时,再有元素入队发生溢出时,再有元素入队发生溢出真溢出真溢出。v当当frontfront-1,rear=M-1-1,rear=M-1时,再有元素入队发生溢出时,再有元素入队发生溢出假溢出。假溢出。41u栈有三种操作:栈有三种操作:入栈出栈读栈顶元素入栈出栈读栈顶元素u队列有三种操作:入队出队读队首元素队列有三种操作:入队出队读队首元素例:有入栈元素序列:例:有入栈元素序列:ABCD,求可能的出栈序列,求可能的出栈序列如是队列又是什么情况呢?如是队列又是什么情况呢?42队列溢出解决方案n队首固定,每次出队剩余元素向下移动队首固定,每次出队剩余元素向下移动浪费时间。浪费时间。n循环队列循环队列把队列的存储空间在逻辑上看作一个环,当把队列的存储空间在逻辑上看作一个环,当R指向存储空间的末端后,就把它重新置于指向存储空间的末端后,就把它重新置于始端。始端。n基本思想:把队列基本思想:把队列设想成环形设想成环形,让,让sq0sq0接在接在sqM-1sqM-1之后,若之后,若rear+1=M,rear+1=M,则令则令rear=0;rear=0;n入队:入队:rear=(rear+1)%M;sqrear=x;rear=(rear+1)%M;sqrear=x;n出队:出队:front=(front+1)%M;x=sqfront;front=(front+1)%M;x=sqfront;0M-11frontrear.43J4J4J5J5J6J60 01 12 23 34 45 5rearrearfrontfrontJ9J9J8J8J7J7J4J4J5J5J6J60 01 12 23 34 45 5rearrearfrontfront初始状态初始状态J4,J5,J6J4,J5,J6出队出队J7,J8,J9J7,J8,J9入队入队解决方案:解决方案:1.1.另外另外设一个标志设一个标志以区别队空、队满以区别队空、队满2 2.少用一个元素空间少用一个元素空间:队空:队空:front=rearfront=rear 队满:队满:(rear+1)%M=frontrear+1)%M=front0 01 12 23 34 45 5rearrearfrontfront队空:队空:front=rearfront=rear队满:队满:front=rearfront=rear44循环队列frontrear队列空:front=rear;frontrearBCD队列满:(rear+1)%MaxSize=front45循环队列frontrearBCD队列满:frontrearCD出队:front=(front+1)%MaxSize进队:rear=(rear+1)%MaxSize frontrearCDE46循环队列中结点的个数循环队列循环队列队中结点的个数:队中结点的个数:(rear-front+maxSize)%maxSize47队列中进行插入的一端称做队尾队列中进行插入的一端称做队尾(rear),进行删除的一进行删除的一端称做队首端称做队首(front)。习题:数据结构分为逻辑结构和存储结构,循环队习题:数据结构分为逻辑结构和存储结构,循环队列属于列属于【】结构。(结构。(2005年年9月)月)答案:存储结构。答案:存储结构。48常见数据结构的逻辑结构常见数据结构的逻辑结构u线性表线性表 线性结构u栈栈是特殊的线性表 u队列队列 也是一种操作受限的特殊的线性表u树树(树型结构)(树型结构)是一种重要的非线形数据结构49数据存储结构方面的考题数据存储结构方面的考题 1:数据的存:数据的存储结储结构是指构是指(2005年年4月)月)A)存存储储在外存中的数据在外存中的数据B)数据所占的存数据所占的存储储空空间间量量C)数据在数据在计计算机中的算机中的顺顺序存序存储储方式方式D)数据的数据的逻辑结逻辑结构在构在计计算机中的表示算机中的表示2.下列叙述中正确的是下列叙述中正确的是(2009年年3月)月)A)栈栈是是“先先进进先出先出”的的线线性表性表B)队队列是列是“先先进进后出后出”的的线线性表性表C)循)循环队环队列是非列是非线线性性结结构构D)有序)有序线线性表既可以采用性表既可以采用顺顺序存序存储结储结构,也可以采用构,也可以采用链链式存式存储结储结构构3.数据结构分为线性结构和非线性结构,带链的队列属于数据结构分为线性结构和非线性结构,带链的队列属于。4.下列数据结构中,属于非线性结构的是下列数据结构中,属于非线性结构的是A)循环队列)循环队列B)带链队列带链队列C)二叉树二叉树D)带链栈)带链栈答案:答案:D。答案:答案:D。答案:线性结构。答案:线性结构。答案:答案:c505。下列叙述中正确的是(下列叙述中正确的是()。)。(2008年年9月)月)A)顺顺序序存存储储结结构构的的存存储储一一定定是是连连续续的的,链链式式存存储储结结构构的的存存储储空空间不一定是连续的间不一定是连续的B)顺顺序序存存储储结结构构只只针针对对线线性性结结构构,链链式式存存储储结结构构只只针针对对非非线线性性结构结构C)顺序存储结构能存储有序表,链式存储结构不能存储有序表)顺序存储结构能存储有序表,链式存储结构不能存储有序表D)链式存储结构比顺序存储结构节省存储空间)链式存储结构比顺序存储结构节省存储空间答案:答案:A。6 6。下列关于。下列关于栈栈的叙述正确的是的叙述正确的是 (2008年年4月)月)A A)栈栈按按“先先进进先出先出”组织组织数据数据 B)B)栈栈按按“先先进进后出后出”组织组织数据数据 C C)只能在)只能在栈栈底插入数据底插入数据 D D)不能)不能删删除数据除数据答案:答案:B。7.一个队列的初始状态为空。现将元素一个队列的初始状态为空。现将元素A,B,C,D,E,F,5,4,3,2,1依次入队,然后再依次退队,则元素退队的顺序为依次入队,然后再依次退队,则元素退队的顺序为【1】。(2010年年3月)月)答案:答案:A,B,C,D,E,F,5,4,3,2,1519.设某循环队列的容量为设某循环队列的容量为50,如果头指针,如果头指针front=45(指向指向队头元素的前一位置队头元素的前一位置),尾指针,尾指针rear=10(指向队尾元素指向队尾元素),则该循环队列中共有,则该循环队列中共有【2】个元素。个元素。(2010年年3月)月)8。假假设设用一个用一个长长度度为为50的数的数组组(数(数组组元索的下元索的下标标从从0到到49)作)作为栈为栈的存的存储储空空间间,栈栈底指底指针针bottom指向指向栈栈底底元素,元素,栈顶栈顶指指针针top指向指向栈顶栈顶元素,如果元素,如果bottom=49,top=30(数(数组组下下标标),),则栈则栈中具有中具有【】个元素。个元素。(2009年年3月)月)答案:答案:20答案:答案:15(rear-front+maxSize)%maxSize52一个非空的数据结构若满足下面的两个条件,则这种数据结构一个非空的数据结构若满足下面的两个条件,则这种数据结构即为即为线性结构线性结构线性结构线性结构。有且仅有一个根结点;有且仅有一个根结点;除第一个结点外,每一个结点最多有一个直接前驱结点;除第一个结点外,每一个结点最多有一个直接前驱结点;除最后一个结点外,每一个结点最多有一个直接后继结点。除最后一个结点外,每一个结点最多有一个直接后继结点。u线性结构与非线性结构线性结构与非线性结构线性表、栈和队列都是线性结构线性表、栈和队列都是线性结构一个数据结构不是线性结构,则称其为一个数据结构不是线性结构,则称其为非线性结非线性结非线性结非线性结构构构构。a1a2a5a3a4HEAD319510线性链表的逻辑状态线性链表的逻辑状态53树型结构是一种重要的非线性结构。树型结构是一种重要的非线性结构。u树的概念树的概念u二叉树的概念二叉树的概念u二叉树的存储二叉树的存储u二叉树的遍历二叉树的遍历3.树与二叉树树与二叉树54树的概念树的概念树的概念树的概念u 树的定义:树的定义:n个结点的有限集。(个结点的有限集。(n=0)ABDFECGHIJKMn根:根:onlyonen若若n=0,则称为空树;,则称为空树;n否则,当否则,当n1时,其余结时,其余结点被分成点被分成m(m0)个互不)个互不相交的子集相交的子集T1,T2,.,Tm,每个子集又是一棵树。,每个子集又是一棵树。由此可以看出,树的定义是由此可以看出,树的定义是递归的。递归的。nQuestion:如何辨别根?:如何辨别根?A只有一个只有一个结点的树结点的树55树型结构的常用术语树型结构的常用术语树型结构的常用术语树型结构的常用术语ABDFECGHIJKMn结点的度结点的度结点的度结点的度一个结点的子树的一个结点的子树的个数;个数;Q:结点结点A、G的度数?的度数?n树的度树的度树的度树的度树中所有结点度的最树中所有结点度的最大值;大值;Q:右图中树的度?右图中树的度?n终端结点终端结点终端结点终端结点度为度为0的结点;的结点;Q:图中叶子结点有几个?图中叶子结点有几个?7n n 非终端结点非终端结点非终端结点非终端结点度不为度不为0的结点;的结点;Q:图中非终端结点有几个?图中非终端结点有几个?5孩子结点、双亲结点、兄弟结点、结点的子孙、结点的祖先孩子结点、双亲结点、兄弟结点、结点的子孙、结点的祖先孩子结点、双亲结点、兄弟结点、结点的子孙、结点的祖先孩子结点、双亲结点、兄弟结点、结点的子孙、结点的祖先56树型结构的常用术语树型结构的常用术语树型结构的常用术语树型结构的常用术语ABDFECGHIJKMn结点的层次结点的层次结点的层次结点的层次树中根结点的层次树中根结点的层次为为1,根结点子树的根为第,根结点子树的根为第2层,层,以此类推;以此类推;Q:图中结点图中结点F的层次?的层次?n树的深度树的深度树的深度树的深度 树中所有结点层次树中所有结点层次的最大值;的最大值;Q:图中树的深度?图中树的深度?n有序树、无序树有序树、无序树有序树、无序树有序树、无序树如果树中每如果树中每棵子树从左向右的排列拥有一定棵子树从左向右的排列拥有一定的顺序,不得互换,则称为有序的顺序,不得互换,则称为有序树,否则称为无序树。树,否则称为无序树。57二叉树的概念二叉树的概念二叉树的概念二叉树的概念定义:定义:定义:定义:二叉树是一种有序的树形结构。它与一般二叉树是一种有序的树形结构。它与一般树形结构的区别是:树形结构的区别是:n每个结点最多有两棵子树;每个结点最多有两棵子树;n子树有左右之分,次序不能任意颠倒。子树有左右之分,次序不能任意颠倒。二叉树的二叉树的5种基本形态种基本形态58二叉树的性质二叉树的性质二叉树的性质二叉树的性质【性质1】在二叉树的第在二叉树的第i层上最多有层上最多有2i-1个结点(个结点(i1)ABCDFEHG59【性质2】深度为深度为h的二叉树最多有的二叉树最多有2h-1个结点(个结点(h1)n n满二叉树满二叉树满二叉树满二叉树:如果一个深度为如果一个深度为h的二叉树拥有的二叉树拥有2h-1个结个结点,则将它称为点,则将它称为满二叉树满二叉树。n n完全二叉树完全二叉树完全二叉树完全二叉树:有一棵深度为有一棵深度为h,具有,具有n个结点的二叉树,个结点的二叉树,若将它与一棵同深度的满二叉树中的所有结点按从上若将它与