欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    数据结构与算法课件.pptx

    • 资源ID:82454292       资源大小:2.61MB        全文页数:135页
    • 资源格式: PPTX        下载积分:20金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要20金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    数据结构与算法课件.pptx

    数据结构与算法Data Structure and Algorithm数据结构是一门研究非数值计算的程序设计问题中的操作对象,以及它们之间的关系和操作等相关问题的学科。1968 Donald E.Knuth“The Art of Computer Programming”http:/www-cs-faculty.stanford.edu/uno/计算机排版系统TEX程序设计 =数据结构+算法数据:描述客观事物的符号,是计算机中可以操作的对象,是能被计算机识别,并输入给计算机处理的符号集合。数据元素:组成数据的、有一定意义的基本单位,在计算机中通常作为整体处理。也被称为记录。数据项:一个数据元素可以由若干数据项组成。数据对象:性质相同的数据元素的集合,是数据的子集。数据数据对象数据元素数据项数据项数据项数据项数据元素不同数据元素之间不是独立的,而是存在特定的关系,将这些关系称为结构。数据结构:相互之间存在一种或多种特定关系的数据元素的集合逻辑结构:数据对象中数据元素之间的相互关系物理结构:是指数据的逻辑结构在计算机中的存储形式。示意图表示数据逻辑结构:将每一个数据元素看作一个结点,用圆圈表示。元素之间的逻辑关系用结点之间的连线表示,如果这个关系是有方向的,那么用带箭头的连线表示。集合结构:集合结构中的数据元素,除了同属于一个集合外,它们之间没有其他关系。线性结构:线性结构中的数据元素之间是一对一的关系。树形结构:树形结构中的数据元素之间存在一对多的层次关系。图形结构:图形结构的数据元素是多对多的关系物理结构顺序存储结构:是把数据元素存放在地址连续的存储单元里,其数据间的逻辑关系和物理关系是一致的。链式存储结构:是把数据元素存放在任意的存储单元里,这组存储单元可以是连续的,也可以是不连续的。逻辑结构是面向问题的,物理结构是面向计算机的。物理结构的基本目的就是将数据及其逻辑关系存储到计算机的内存中。逻辑结构构物理物理结构构集合集合结构构线性性结构构树形形结构构图形形结构构顺序存序存储结构构链接存接存储结构构算法:解决特定问题求解步骤的描述,在计算机中表现为指令的有限序列,并且每条指令表示一个或多个操作。算法的特性输入:具有零个或多个输入输出:至少有一个或多个输出有穷性:算法在执行有限的步骤之后,自动结束而不会出现无线循环。确定性:算法的每一步都具有确定的含义,不会出现二义性。可行性:算法的每一步都是可行的,即每一步都能通过执行有限次数完成。Thomas H.Cormen,Chales E.Leiserson(2009)第三版“直白的说,算法就是任何明确定义的计算过程,它接收一些值或集合作为输入,并产生一些值或集合作为输出。这样,算法就是将输入转换为输出的一系列计算过程”简而言之,我们可以说算法就是用来解决一个特定任务的一系列步骤。一个有效的算法应该含有三个重要特性:1 它必须是有限的:如果你设计的算法永无休止的尝试解决问题,那么它是无用的。2 它必须具备明确定义的指令:算法的每一步都必须准确定义,在任何场景下指令都应当没有歧义。3 它必须是有效的:一个算法被设计用以解决某个问题,那么它就应当能解决这个问题,并且应该是收敛的。算法设计的要求正确性:算法的正确性是指算法至少应该具有输入、输出和加工处理无歧义性、能够正确反映问题的需求、能够得到问题的正确答案1 算法程序没有语法错误2 算法程序对于合法的输入数据能够产生满足要求的输出结果3 算法程序对于非法的输入能够得出满足规格说明的结果4 算法程序对于精心选择的,甚至刁难的测试数据都能够有满足要求的输出结果。可读性:算法设计的另一目的是为了便于阅读、理解和交流。健壮性:当输入数据不合法时,算法也能做出相关处理,而不是产生异常或莫名其妙的结果。时间效率与空间效率算法效率的度量方法事后统计方法:主要是通过设计好的测试程序和数据,利用计算机计时器对不同算法编制的程序的运行时间进行比较,从而确定算法效率的高低。事前分析估计方法:在计算机程序编制前,依据统计方法进行估算高级程序语言程序运行消耗时间取决于:1 算法的策略,方法。2 编译产生的代码质量3 问题的输入规模4 机器执行指令的速度可以忽略加法常数与最高项相乘的常数并不重要判断一个算法的效率时,函数中的常数和其他次要项常常可以忽略,而更应该关注最高阶项的阶数时间复杂度在进行算法分析时,语句总的执行次数T(n)是关于问题规模n的函数,进而分析T(n)随n的变化情况并确定T(n)的数量级。算法的时间复杂度,也就是算法的时间度量,记作:T(n)=O(f(n)它表示随问题规模n的增大,算法执行时间的增长率和f(n)的增长率相同,称作算法的监禁时间复杂度,简称为时间复杂度。其中,f(n)是问题规模n的某个函数。推导大推导大O阶:阶:1.用用常数常数1取代运行时间中的所有加法常数。取代运行时间中的所有加法常数。2.在修改后在修改后的运行次数函数中,只保留最高阶项。的运行次数函数中,只保留最高阶项。3.如果最高阶项存在且不是如果最高阶项存在且不是1,则去除与这个项相乘的,则去除与这个项相乘的常数。常数。得到得到的结果就是大的结果就是大O阶。阶。30 线性表的类型定义(a1,a2,ai-1,ai,ai1,,an)1.线性表的定义:是n个数据元素的有限序列n=0时称为数据元素线性起点ai的直接前趋ai的直接后继下标,是元素的序号,表示元素在表中的位置n为元素总个数,即表长空表线性终点31 线性表的顺序表示和实现线性表的顺序表示又称为顺序存储结构或顺序映像逻辑上相邻,物理上也相邻用一组地址连续的存储单元依次存储线性表的元素,可通过数组来实现若已知表中首元素在存储器中的位置,则其他元素存放位置亦可求出(利用数组下标)32 线性表线性表(a1,a1,a2,.an)(a1,a1,a2,.an)顺序存储结构的一般形式顺序存储结构的一般形式 序号序号 存储状态存储状态 存储地址存储地址 1 b 1 b 2 b+p 2 b+p i b+(i-1)*p i b+(i-1)*p n b+(n-1)*p n b+(n-1)*p 自由区自由区 maxleng b+(maxleng-1)*p maxleng b+(maxleng-1)*p其中其中:b-:b-表的首地址表的首地址/基地址基地址/元素元素a1a1的地址。的地址。p-1 p-1个数据元素所占存储单元的数目。个数据元素所占存储单元的数目。maxleng-maxleng-最大长度最大长度,为某个常数。为某个常数。a1a1 a2a2 .aiai .anan /33线性表顺序结构在C语言中的定义 其中:SqList-结构类型名 La-结构类型变量名 La.length-表长 La.elem0-a1 La.elemLa.length-1-an#define maxleng 100 struct SqList ElemType elemmaxleng;/下标:0,1,.,maxleng-1 int length;/表长;SqList La;34线性表的顺序存储结构定义(动态)#define List_Init_size 100#define Listincrement 10struct SqList ElemType*elem;int length;int listsize;35 顺序存储结构的顺序存储结构的寻址公式寻址公式 i=1 2 i ni=1 2 i n 地址地址=b b+1 b+(i-1)p b+(n-1)p=b b+1 b+(i-1)p b+(n-1)p 假设假设:线性表的首地址为线性表的首地址为b,b,每个数据元素占每个数据元素占p p个存储个存储 单元单元,则表中任意元素则表中任意元素ai(1in)ai(1in)的存储地址是的存储地址是:LOC(i)=LOC(1)+(i-1)*p LOC(i)=LOC(1)+(i-1)*p =b+(i-1)*p (1in)=b+(i-1)*p (1in)例例:假设假设 b=1024,p=4,i=35 b=1024,p=4,i=35 LOC(i)=b+(i-1)*p LOC(i)=b+(i-1)*p =1024+(35-1)*4 =1024+(35-1)*4 =1024+34*4 =1024+34*4 =1160 =1160 a1a1a2a2.aiai.anan/36插入算法实现举例设 L.elem0.maxleng-1中有legth个元素,在 L.elemi-1之插入新元素e,1=inext =first;first=newnode;(插入前)(插入后)newnodenewnodefirst firstdatanextqdatanextdatanextdatanull firstdatanextdatanextdatanull firstdatanextq48在链表中间插入newnode-next=current-next;current-next=newnode;(插入前)(插入后)newnodecurrentnewnodecurrent49datanextdatanextdatanull datanextqpdatanextdatanextdatanull datanextq50在链表末尾插入newnode-next =current-next;current-next =newnode;(插入前)(插入后)newnodenewnodecurrentcurrent51在链表中设置头结点在链表的首元结点之前附设的一个头结点,该结点的数据域中不存储线性表的数据元素,其作用是为了对链表进行操作时,可以对空表、非空表的情况以及对首元结点进行统一处理,编程更方便无头结点时,当头指针的值为空时表示空表;有头结点时,当头结点的指针域为空时表示空表52 循环链表(Circular List)循环链表是单链表的变形。循环链表最后一个结点的 next 指针不 为NULL,而是指向了表的前端。为简化操作,在循环链表中往往加入表头结点。循环链表的特点是:只要知道表中某一结点的地址,就可搜寻到所有其他结点的地址53循环链表的示例带表头结点的循环链表a1a2a3anfirstanfirsta2a1first(空表)(非空表)54循环链表的运算与单链表类似,只是在涉及到链头与链尾的处理时稍有不同表尾插入树的基本概念树的基本概念二叉树二叉树二叉树的存储表示二叉树的存储表示二叉树的遍历二叉树的遍历1.1 树的定义和术语树的定义和术语树:树:n(n0)个个结点结点的有限的有限集合集合。当。当n0时,称为时,称为空树;任意一棵非空树满足以下条件:空树;任意一棵非空树满足以下条件:有且仅有一个特定的称为有且仅有一个特定的称为根根的结点;的结点;当当n1时时,除除根根结结点点之之外外的的其其余余结结点点被被分分成成m(m0)个个互互不不相相交交的的有有限限集集合合T1,T2,Tm,其其中每个集合又是一棵树,并称为这个根结点的中每个集合又是一棵树,并称为这个根结点的子树子树。1 树的基本概念树的基本概念树的定义是采用递归方法树的定义是采用递归方法(a)一棵树结构一棵树结构 (b)一个非树结构一个非树结构 (c)一个非树结构一个非树结构 ACBGFEDHIACBGFDACBGFDE以下哪一棵是树?哪一棵不是?理由?结点的度:结点的度:结点所拥有的子树的个数。结点所拥有的子树的个数。树的度:树的度:树中各结点度的最大值。树中各结点度的最大值。CGBDEFKLHMIJA叶子结点:叶子结点:度为度为0的结点,也称为终端结点。的结点,也称为终端结点。分支结点:分支结点:度不为度不为0的结点,也称为非终端结点。的结点,也称为非终端结点。CGBDEFKLHMIJA孩子、双亲:孩子、双亲:树中某结点子树的根结点称为这个结点树中某结点子树的根结点称为这个结点的的孩子结点孩子结点,这个结点称为它孩子结点的,这个结点称为它孩子结点的双亲结点双亲结点;兄弟:兄弟:具有同一个双亲的孩子结点互称为兄弟。具有同一个双亲的孩子结点互称为兄弟。CGBDEFKLHMIJA路径:路径:如果树的结点序列如果树的结点序列n1,n2,nk有如下关系:结有如下关系:结点点ni是是ni+1的双亲(的双亲(1=ik),则把,则把n1,n2,nk称为称为一条由一条由n1至至nk的路径;路径上经过的边的个数称为的路径;路径上经过的边的个数称为路路径长度径长度。CGBDEFKLHMIJA祖先、子孙:祖先、子孙:在树中,如果有一条路径从结点在树中,如果有一条路径从结点x到结到结点点y,那么那么x就称为就称为y的祖先,而的祖先,而y称为称为x的子孙。的子孙。CGBDEFKLHMIJA结点所在层数:结点所在层数:根结点的层数为根结点的层数为1 1;对其余任何结点,;对其余任何结点,若某结点在第若某结点在第k k层,则其孩子结点在第层,则其孩子结点在第k+1k+1层。层。树的深度:树的深度:树中所有结点的最大层数,也称树中所有结点的最大层数,也称高度高度。1 1层层2层层4 4层层3层层高度高度4CGBDEFKLHMIJCCBDEFKLHJA71234568910层序编号:层序编号:将树中结点按照从上层到下层、同层从左将树中结点按照从上层到下层、同层从左到右的次序依次给他们编以从到右的次序依次给他们编以从1 1开始的连续自然数。开始的连续自然数。有序树、无序树:有序树、无序树:如果一棵树中结点的各子树从左如果一棵树中结点的各子树从左到右是有次序的,称这棵树为有序树;反之,称为到右是有次序的,称这棵树为有序树;反之,称为无序树。无序树。数据结构中讨论的一般都是有序树数据结构中讨论的一般都是有序树 ACBGFEDACBGFED树结构和线性结构的比较树结构和线性结构的比较线性结构线性结构线性结构线性结构树结构树结构树结构树结构第第一一个数据元素个数据元素根结点(只有根结点(只有一一个)个)无前驱无前驱无双亲无双亲最后最后一一个数据元素个数据元素叶子结点叶子结点(可以有可以有多多个个)无后继无后继无孩子无孩子其它数据元素其它数据元素其它结点其它结点一个前驱一个前驱,一个后一个后继继一个双亲一个双亲,多个孩子多个孩子一对一一对一一对一一对一 一对多一对多一对多一对多二叉树的定义二叉树的定义二叉树的定义二叉树的定义 二叉树是二叉树是n(n0)个结点的有限集合,该集合或个结点的有限集合,该集合或者为空集(称为空二叉树),者为空集(称为空二叉树),或者由一个根结点或者由一个根结点和两棵和两棵互不相交互不相交的、分别称为根结点的的、分别称为根结点的左子树左子树和和右子树右子树的二叉树组成。的二叉树组成。2 二叉树二叉树问题转化:将树转换为二叉树,从而利用二叉树解问题转化:将树转换为二叉树,从而利用二叉树解问题转化:将树转换为二叉树,从而利用二叉树解问题转化:将树转换为二叉树,从而利用二叉树解决树的有关问题。决树的有关问题。决树的有关问题。决树的有关问题。研究二叉树的意义?研究二叉树的意义?2.1 2.1 2.1 2.1 二叉树的定义二叉树的定义二叉树的定义二叉树的定义 二叉树的特点:二叉树的特点:每个结点最多有两棵子树;每个结点最多有两棵子树;二叉树是有序的,其次序不二叉树是有序的,其次序不能任意颠倒能任意颠倒。注意:二叉树和树是两种树结构。注意:二叉树和树是两种树结构。ABCDEFGABAB二叉树的基本形态二叉树的基本形态空二叉树空二叉树只有一个根结点只有一个根结点左子树左子树根结点只有左子树根结点只有左子树右子树右子树根结点只有右子树根结点只有右子树左子树左子树右子树右子树根结点同时有左右子树根结点同时有左右子树具有具有3 3个结点的树和具有个结点的树和具有3 3个结点的二叉树的形态个结点的二叉树的形态v二叉树和树是两种树结构。二叉树和树是两种树结构。2.2 2.2 2.2 2.2 二叉树的性质二叉树的性质二叉树的性质二叉树的性质 性质性质1 二叉树的第二叉树的第i层上最多有层上最多有2i-1个结点(个结点(i1)。)。证明:证明:当当i=1时时,第,第1层只有一个根结点,而层只有一个根结点,而 2i-1=20=1,结论显然成立。结论显然成立。假定假定i=k(1ki)时结论成立,即第)时结论成立,即第k层上至多有层上至多有2k-1个结点,个结点,则则 i=k+1时时,因为第,因为第k+1层上的结点是第层上的结点是第k层上结点的孩子,而二叉树中每个结点最多有层上结点的孩子,而二叉树中每个结点最多有2个个孩子,故在第孩子,故在第k+1层上最大结点个数为第层上最大结点个数为第k层上的最层上的最大结点个数的二倍,即大结点个数的二倍,即22k-12k。结论成立。结论成立。证明用数学归纳法证明用数学归纳法性质性质2 深度为深度为k(k0)的二叉树,最多有的二叉树,最多有2k-1个结点,个结点,最少有最少有k个结点。个结点。证明:由性质证明:由性质1可知,深度为可知,深度为k的二叉树中结点个数最多的二叉树中结点个数最多=2k-1;每一层至少要有一个结点,因此深度为每一层至少要有一个结点,因此深度为k的二叉树,的二叉树,至少有至少有k个结点。个结点。深度为深度为k且具有且具有2k-1个结点的二叉树个结点的二叉树一定是一定是满二叉树,满二叉树,性质性质3 对任何一棵非空二叉树对任何一棵非空二叉树,如果如果叶子结点叶子结点数为数为n0,度为度为2的结点数为的结点数为n2,则有则有:n0n21。证明:证明:设度为设度为1的结点数为的结点数为n1,二叉树总的结点数二叉树总的结点数为为n,则有则有:n=n0 n1 n2。再设分支条数为再设分支条数为e,有有e=n-1=n0 n1 n2 1,同时有同时有 e=n1 2n2 因此得因此得 n0 n1 n2 1=n1 2n2,于是得证。于是得证。性质性质4 具有具有n个结点的完全二叉树的最小深度为个结点的完全二叉树的最小深度为 log2(n+1)。证证明明:假假设设具具有有n个个结结点点的的完完全全二二叉叉树树的的深深度度为为k,根据完全二叉树的定义和性质根据完全二叉树的定义和性质2,有下式成立,有下式成立 2k-1 1 n 2k-1 2k-1-12k-12k-1第第k-1层层第第k层层最少结点数最少结点数最多结点数最多结点数完全二叉树是指除最后一层外,每一层上的结点数均完全二叉树是指除最后一层外,每一层上的结点数均达到最大值,在最后一层上只缺少右边的若干结点。达到最大值,在最后一层上只缺少右边的若干结点。对不等式取对数,有:对不等式取对数,有:k-1 log2(n+1)k即:即:log2(n+1)k log2(n+1)+1由于由于k是整数,故必有是整数,故必有k log2(n+1)。log2(n+1)+1log2n+1log2(n+1)log2(n+1)k所在区间所在区间性质性质5 对一棵具有对一棵具有n个结点的完全二叉树中从个结点的完全二叉树中从1开始按层序编开始按层序编号,则对于任意的序号为号,则对于任意的序号为i(1in)的结点(简称为结点的结点(简称为结点i),),有:有:(1)如果如果i1,则结点则结点i的双亲结点的序号为的双亲结点的序号为 i/2 ;如果如果i1,则结点则结点i是根结点,无双亲结点。是根结点,无双亲结点。(2)如果如果2in,则结点则结点i的左孩子的序号为的左孩子的序号为2i;(3)如果如果2i1n,则结点则结点i的右孩子的序号为的右孩子的序号为2i1;(4)若结点编号若结点编号i为奇数,且为奇数,且i1,它处于右兄弟位置,则它的左兄弟它处于右兄弟位置,则它的左兄弟为结点为结点i-1。(5)若结点编号若结点编号i为偶数,且为偶数,且in,它处于左兄弟位置,则它的右兄弟它处于左兄弟位置,则它的右兄弟为结点为结点i+1。(6)结点结点i所在层次为所在层次为 log2i +1。18910456723对一棵具有对一棵具有n个结点的完全个结点的完全二叉树中从二叉树中从1开始按层序编开始按层序编号,则号,则l 结点结点i的双亲结点为的双亲结点为 i/2;l 结点结点i的左孩子为的左孩子为2i;l 结点结点i的右孩子为的右孩子为2i1。性质性质5表明,在完全二叉树中,结点的层序编号反映表明,在完全二叉树中,结点的层序编号反映了结点之间的逻辑关系。了结点之间的逻辑关系。二叉树的遍历操作二叉树的遍历操作二叉树的遍历操作二叉树的遍历操作 二叉树的遍历是指从根结点出发,按照某种二叉树的遍历是指从根结点出发,按照某种次序次序访问二叉树中的所有结点,使得每个结点被访问一访问二叉树中的所有结点,使得每个结点被访问一次且仅被次且仅被访问访问一次。一次。二叉树遍历操作的结果?二叉树遍历操作的结果?将非线性结构线性化将非线性结构线性化抽象操作,抽象操作,可以是对结点进行的各种可以是对结点进行的各种处理,这里处理,这里简化为输出结点的数据。简化为输出结点的数据。前序遍历前序遍历中序遍历中序遍历后序遍历后序遍历层序遍历层序遍历 二叉树的遍历二叉树的遍历二叉树的遍历方式:二叉树的遍历方式:VLR、LVR、LRV、VRL、RVL、RLV 如果限定先左后右,则二叉树遍历方式有三种:如果限定先左后右,则二叉树遍历方式有三种:前序前序:VLR中序中序:LVR后序后序:LRV层序遍历层序遍历:按二叉树的层序编号的次序访问各结点。:按二叉树的层序编号的次序访问各结点。考虑二叉树的组成:考虑二叉树的组成:访问根结点记作访问根结点记作访问根结点记作访问根结点记作V遍历左子树遍历左子树记作记作记作记作L遍历右子树遍历右子树记作记作记作记作R二叉树二叉树二叉树遍历的递归算法二叉树遍历的递归算法前序(根)遍历前序(根)遍历若若二二叉叉树树为为空空,则则空空操操作作返返回回;否则:否则:访问根结点;访问根结点;前序前序遍历遍历根根结点的左子树;结点的左子树;前序前序遍历遍历根根结点的右子树。结点的右子树。前序遍历序列:前序遍历序列:-+a*b-c d/e f二叉树的遍历操作二叉树的遍历操作二叉树的遍历操作二叉树的遍历操作 -/+*abcdef中序(根)遍历中序(根)遍历若若二二叉叉树树为为空空,则则空空操操作作返返回回;否则:否则:中序中序遍历遍历根根结点的左子树;结点的左子树;访问根结点;访问根结点;中序中序遍历遍历根根结点的右子树。结点的右子树。中序遍历序列:中序遍历序列:a+b*c-d-e/f二叉树的遍历操作二叉树的遍历操作二叉树的遍历操作二叉树的遍历操作 -/+*abcdef后序(根)遍历后序(根)遍历若若二二叉叉树树为为空空,则则空空操操作作返返回回;否则:否则:后序后序遍历遍历根根结点的左子树;结点的左子树;后序后序遍历遍历根根结点的右子树。结点的右子树。访问根结点;访问根结点;后序遍历序列:后序遍历序列:a b c d-*+e f/-二叉树的遍历操作二叉树的遍历操作二叉树的遍历操作二叉树的遍历操作 -/+*abcdef层序遍历层序遍历二二叉叉树树的的层层次次遍遍历历是是指指从从二二叉叉树树的的第第一一层层(即即根根结结点点)开开始始,从从上上至至下下逐逐层层遍遍历历,在在同同一一层层中中,则则按按从从左左到到右右的顺序对结点逐个访问。的顺序对结点逐个访问。层序遍历序列:层序遍历序列:-+/a*e f b c d二叉树的遍历操作二叉树的遍历操作二叉树的遍历操作二叉树的遍历操作 -/+*abcdef二叉树遍历操作练习二叉树遍历操作练习前序遍历结果:前序遍历结果:ABDGCEF中序遍历结果:中序遍历结果:DGBAECF后序遍历结果:后序遍历结果:GDBEFCA层序遍历结果:层序遍历结果:ABCDEFGABCDEFG已知一棵二叉树的前序遍历的结果序列是ABECDFGHIJ,中序遍历的结果序列是EBCDAFHIGJ,试画出这棵二叉树,并求出后序遍历序列和层序遍历序列。1 图的基本概念图的定义图的定义图的定义图的定义图是由顶点的图是由顶点的有穷有穷非空非空集合和顶点之间边的集合组集合和顶点之间边的集合组成,通常表示为:成,通常表示为:G=(V,E)其中:其中:G表示一个图,表示一个图,V是图是图G中顶点的集合,中顶点的集合,E是是图图G中顶点之间边的集合。中顶点之间边的集合。在线性表中,元素个数可以为零,称为空表;在线性表中,元素个数可以为零,称为空表;在树中,结点个数可以为零,称为空树;在树中,结点个数可以为零,称为空树;在图中,顶点个数不能为零,但可以没有边。在图中,顶点个数不能为零,但可以没有边。如如果果图图的的任任意意两两个个顶顶点点之之间间的的边边都都是是无向边,则称该图为无向边,则称该图为无向图无向图。若顶点若顶点vi和和vj之间的边没有方向,则之间的边没有方向,则称这条边为称这条边为无向边无向边,表示为,表示为(vi,vj)。若从顶点若从顶点vi到到vj的边有方向,则称这的边有方向,则称这条边为条边为有向边有向边,表示为,表示为。如如果果图图的的任任意意两两个个顶顶点点之之间间的的边边都都是是有向边,则称该图为有向边,则称该图为有向图有向图。V1V2V3V4V5V1V2V3V4图的基本术语图的基本术语 简单图:简单图:在图中,若不存在顶点到其自身的边,且同在图中,若不存在顶点到其自身的边,且同一条边不重复出现一条边不重复出现。V3V4V5V1V2V3V4V5V1V2非简单图非简单图 非简单图非简单图 简单图简单图V1V2V3V4V5v 数据结构中讨论的都是简单图。数据结构中讨论的都是简单图。图的基本术语图的基本术语 邻接、依附邻接、依附无无向向图图中中,对对于于任任意意两两个个顶顶点点vi和和顶顶点点vj,若若存存在在边边(vi,vj),则则称称顶顶点点vi和和顶顶点点vj互互为为邻邻接接点点,同同时时称称边边(vi,vj)依附于顶点依附于顶点vi和顶点和顶点vj。V1V2V3V4V5V1的邻接点:的邻接点:V2、V4V2的邻接点:的邻接点:V1、V3、V5图的基本术语图的基本术语 邻接、依附邻接、依附有有向向图图中中,对对于于任任意意两两个个顶顶点点vi和和顶顶点点vj,若若存存在在弧弧,则则称称顶顶点点vi邻邻接接到到顶顶点点vj,顶顶点点vj邻邻接接自自顶顶点点vi,同时称弧同时称弧依附于顶点依附于顶点vi和顶点和顶点vj。V1V2V3V4V1的邻接点:的邻接点:V2、V3V3的邻接点:的邻接点:V4在线性结构中,数据元素之间仅具有线性关系;在线性结构中,数据元素之间仅具有线性关系;在树结构中,结点之间具有层次关系;在树结构中,结点之间具有层次关系;在图结构中,任意两个顶点之间都可能有关系。在图结构中,任意两个顶点之间都可能有关系。FECBAD线性结构线性结构ABCDEF树结构树结构V1V2V3V4V5图结构图结构不同结构中逻辑关系的对比不同结构中逻辑关系的对比不同结构中逻辑关系的对比不同结构中逻辑关系的对比在线性结构中,元素之间的关系为在线性结构中,元素之间的关系为前驱前驱和和后继后继;在树结构中,结点之间的关系为在树结构中,结点之间的关系为双亲双亲和和孩子孩子;在图结构中,顶点之间的关系为在图结构中,顶点之间的关系为邻接邻接。FECBAD线性结构线性结构ABCDEF树结构树结构V1V2V3V4V5图结构图结构不同结构中逻辑关系的对比不同结构中逻辑关系的对比不同结构中逻辑关系的对比不同结构中逻辑关系的对比无无向向完完全全图图:在在无无向向图图中中,如如果果任任意意两两个个顶顶点点之之间间都都存在边,存在边,则称该图为无向完全图。则称该图为无向完全图。有有向向完完全全图图:在在有有向向图图中中,如如果果任任意意两两个个顶顶点点之之间间都都存在方向相反的两条弧,存在方向相反的两条弧,则称该图为有向完全图。则称该图为有向完全图。图的基本术语图的基本术语 V1V2V3V1V2V3V4含有含有n个顶点的无向完全图有个顶点的无向完全图有多少多少条边?条边?含有含有n个顶点的有向完全图有个顶点的有向完全图有多少多少条弧?条弧?含有含有n个顶点的无向完全图有个顶点的无向完全图有n(n-1)/2条边。条边。含有含有n个顶点的有向完全图有个顶点的有向完全图有n(n-1)条边。条边。V1V2V3V1V2V3V4稀疏图:稀疏图:称边数很少的图为稀疏图;称边数很少的图为稀疏图;稠密图:稠密图:称边数很多的图为稠密图。称边数很多的图为稠密图。顶顶点点的的度度:在在无无向向图图中中,顶顶点点v的的度度是是指指依依附附于于该该顶顶点的边数,通常记为点的边数,通常记为TD(v)。图的基本术语图的基本术语 顶顶点点的的入入度度:在在有有向向图图中中,顶顶点点v的的入入度度是是指指以以该该顶顶点为弧头的弧的数目,点为弧头的弧的数目,记为记为ID(v);顶顶点点的的出出度度:在在有有向向图图中中,顶顶点点v的的出出度度是是指指以以该该顶顶点为弧尾的弧的数目,记为点为弧尾的弧的数目,记为OD(v)。权:权:是指对边赋予的有意义的数值量。是指对边赋予的有意义的数值量。网:网:边上带权的图,也称网图。边上带权的图,也称网图。图的基本术语图的基本术语 V1V2V3V42785路路径径:在在无无向向图图G=(V,E)中中,从从顶顶点点vp到到顶顶点点vq之之间间的的路路径径是是一一个个顶顶点点序序列列(vp=vi0,vi1,vi2,vim=vq),其其中中,(vij-1,vij)E(1jm)。若若G是是有有向向图图,则则路路径径也也是是有有方向的,顶点序列满足方向的,顶点序列满足E。图的基本术语图的基本术语 V1V2V3V4V5v一般情况下,图中的路径不惟一。一般情况下,图中的路径不惟一。V1 到到V4的路径:的路径:V1 V4 V1 V2 V3 V4 V1 V2 V5V3 V4路径长度:路径长度:图的基本术语图的基本术语 非带权图非带权图路径路径上边的上边的个数个数带权图带权图路径上路径上各边的各边的权之和权之和V1V2V3V4V5V1 V4:长度为:长度为1V1 V2 V3 V4:长度为:长度为3V1 V2 V5V3 V4:长度为:长度为4回路(环)回路(环):第一个顶点和最后一个顶点相同的路径。:第一个顶点和最后一个顶点相同的路径。简单路径:简单路径:序列中顶点不重复出现的路径。序列中顶点不重复出现的路径。简单回路(简单环):简单回路(简单环):除了第一个顶点和最后一个顶点除了第一个顶点和最后一个顶点外,其余顶点不重复出现的回路。外,其余顶点不重复出现的回路。图的基本术语图的基本术语 V1V2V3V4V5V1V2V3V4邻接矩阵(数组表示法)邻接矩阵(数组表示法)邻接矩阵(数组表示法)邻接矩阵(数组表示法)基基本本思思想想:用用一一个个一一维维数数组组存存储储图图中中顶顶点点的的信信息息,用用一一个个二二维维数数组组(称称为为邻邻接接矩矩阵阵)存存储储图图中中各各顶顶点点之间的之间的邻接邻接关系。关系。假假设设图图G(V,E)有有n个个顶顶点点,则则邻邻接接矩矩阵阵是是一一个个nn的方阵,定义为:的方阵,定义为:G.Edgeij1 若若(vi,vj)E(或(或E)0 其它其它无向图的邻接矩阵的特点?无向图的邻接矩阵的特点?无向图的邻接矩阵无向图的邻接矩阵V1V3V4V2V1 V2 V3 V4vertex=0 1 0 1 1 0 1 1 0 1 0 0 1 1 0 0 G.Edge=V1 V2 V3 V4V1V2V3V4主对角线为主对角线为 0 且一定是对称矩阵。且一定是对称矩阵。如何求顶点如何求顶点i的度?的度?无向图的邻接矩阵无向图的邻接矩阵V1V3V4V2V1 V2 V3 V4vertex=邻接矩阵的第邻接矩阵的第i行(或第行(或第i列)非零元素的个数。列)非零元素的个数。0 1 0 1 1 0 1 1 0 1 0 0 1 1 0 0 G.Edge=V1 V2 V3 V4V1V2V3V4如何判断顶点如何判断顶点 i 和和 j 之间是否存在边?之间是否存在边?无向图的邻接矩阵无向图的邻接矩阵V1V3V4V2V1 V2 V3 V4vertex=测试邻接矩阵中相应位置的元素测试邻接矩阵中相应位置的元素G.Edgeij是否为是否为1。0 1 0 1 1 0 1 1 0 1 0 0 1 1 0 0 G.Edge=V1 V2 V3 V4V1V2V3V4如何求顶点如何求顶点 i 的所有邻接点?的所有邻接点?无向图的邻接矩阵无向图的邻接矩阵V1V3V4V2V1 V2 V3 V4vertex=将数组中第将数组中第 i 行元素扫描一遍,若行元素扫描一遍,若G.Edgeij为为1,则顶点,则顶点 j 为顶点为顶点 i 的邻接点。的邻接点。0 1 0 1 1 0 1 1 0 1 0 0 1 1 0 0 G.Edge=V1 V2 V3 V4V1V2V3V4有向图的邻接矩阵有向图的邻接矩阵V1V2V3V4V1 V2 V3 V4vertex=0 1 1 0 0 0 0 0 0 0 0 1 1 0 0 0 G.Edge=V1 V2 V3 V4V1V2V3V4有向图的邻接矩阵一定不对称吗?有向图的邻接矩阵一定不对称吗?不一定,例如有向完全图。不一定,例如有向完全图。有向图的邻接矩阵有向图的邻接矩阵V1V2V3V4V1 V2 V3 V4vertex=V1 V2 V3 V4V1V2V3V4如何求顶点如何求顶点 i 的出度?的出度?邻接矩阵的第邻接矩阵的第 i 行元素之和。行元素之和。0 1 1 0 0 0 0 0 0 0 0 1 1 0 0 0 G.Edge=有向图的邻接矩阵有向图的邻接矩阵V1V2V3V4V1 V2 V3 V4vertex=V1 V2 V3 V4V1V2V3V4如何求顶点如何求顶点 i 的入度?的入度?邻接矩阵的第邻接矩阵的第 i 列元素之和。列元素之和。0 1 1 0 0 0 0 0 0 0 0 1 1 0 0 0 G.Edge=有向图的邻接矩阵有向图的邻接矩阵V1V2V3V4V1 V2 V3 V4vertex=V1 V2 V3 V4V1V2V3V4如何判断从顶点如何判断从顶点 i 到顶点到顶点 j 是否存在边?是否存在边?测试邻接矩阵中相应位置的元素测试邻接矩阵中相应位置的元素G.Edgeij是否为是否为1。0 1 1 0 0 0 0 0 0 0 0 1 1 0 0 0 G.Edge=邻接表邻接表邻接表邻接表邻接表存储的基本思想:对于图的每个顶点邻接表存储的基本思想:对于图的每个顶点vi,将所将所有邻接于有邻接于vi的顶点链成一个单链表,称为顶点的顶点链成一个单链表,称为顶点vi的的边边表表(对于有向图则称为出边表),所有边表的头指(对于有向图则称为出边表),所有边表的头指针和存储顶点信息的一维针和存储顶点信息的一维数组构成了数组构成了顶点表顶点表。图的邻接矩阵存储结构的空间复杂度?图的邻接矩阵存储结构的空间复杂度?如果为稀疏图则会出现什么现象?如果为稀疏图则会出现什么现象?假设图假设图G有有n个顶点个顶点e条边,则存储该图需要条边,则存储该图需要O(n2)。邻接表有两种结点结构:顶点表结点和边表结点邻接表有两种结点结构:顶点表结点和边表结点。dataadjdestlink 顶点表顶点表 边边 表表 data:数据域,存放顶点信息。数据域,存放顶点信息。adj:指针域,指向边表中第一个结点。指针域,指向边表中第一个结点。dest:邻接点域,边的终点在顶点表中的下标。邻接点域,边的终点在顶点表中的下标。link:指针域,指向边表中的下一个结点。指针域,指向边表中的下一个结点。template struct Edge int dest;E cost;Edge*link;template struct Vertex T data;Edge*adj;定义邻接表的结点定义邻接表的结点 dataadj destlink图的存储结构的比较图的存储结构的比较图的存储结构的比较图的存储结构的比较邻接矩阵和邻接表邻接矩阵和邻接表邻接矩阵和邻接表邻接矩阵和邻接表O(n2)O(n+e)O(n2)O(n+e)空间性能空间性能 时间性能时间性能 适用范围适用范围 唯一性唯一性邻邻接接矩矩阵阵邻邻接接表表稠密图稠密图稀疏图稀疏图唯一唯一不唯一不唯一3 图的遍历图的遍历

    注意事项

    本文(数据结构与算法课件.pptx)为本站会员(飞****2)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开