免费预览已结束,剩余26页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
数据结构,数据结构,基本结构:,2.线性结构:数据之间存在一对一的关系;,3.树:数据元素间存在一对多的关系;,4.图:数据元素间存在多对多的关系;,定义:相互之间存在一种或多种特定关系的数据元素的集合.,1.集合:数据元素之间“同属于一个集合”;,集合,例题.设全集I=a,b,c,d,e,f,g,h,集合A=a,b,c,d,e,f,B=c,d,e,C=a,d,那么集合AnBnC为()。A.c,eB.d,eC.eD.c,d,eE.d,f,n:交集,与的关系u:并集,或的关系:非的关系=notnu,C=b,c,e,f,g,hAnB=c,d,eAnBnC=c,e,A,线性结构,特点:由n(n0)个数据元素(结点)a1,a2,an组成的有限序列,(1).在这个序列中,存在唯一称做“第一个”的数据元素;(2).存在唯一的一个被称做“最后一个”的数据元素;(3).除第一个之外,集合中的每个数据元素均只有一个前驱;(4).除最后一个元素外,集合中的每个元素均只有一个后继.,应用:线性表:栈和队列:数组:,线性结构,线性表,线性表的顺序存储结构,(1)方法:把线性表的结点按逻辑次序依次存放在一组地址连续的存储单元里的方法。,序列:a1,a2,a3,a4,L:表示每个元素所占字节数目,地址:元素所占的第一个单元的存储地址,(2).特点:逻辑上相邻的结点其物理位置亦相邻,结点ai的存储地址不失一般性,设线性表中所有结点的类型相同,则每个结点所占用存储空间大小亦相同。假设表中每个结点占用c个存储单元,其中第一个单元的存储地址则是该结点的存储地址,并设表中开始结点a1的存储地址(简称为基地址)是LOC(a1),那么结点ai的存储地址LOC(ai)可通过下式计算:LOC(ai)=LOC(a1)+(i-1)*c1in,练习:一个向量第一个元素的存储地址是100,每个元素的长度是2,则第5个元素的地址是()A)110B)108C)100D)109,B,线性表,线性表的链式存储结构,(1)方法:用一组任意的存储单元来存放线性表的结点(这组存储单元既可以是连续的,也可以是不连续的)链表中结点的逻辑次序和物理次序不一定相同。为了能正确表示结点间的逻辑关系,在存储每个结点值的同时,还必须存储指示其后继结点的地址(或位置)信息(称为指针(pointer)或链(link)),(2)结点结构,data-存放结点值的数据域next-存放结点的直接后继的地址(位置)的指针域(链域),序列:zhao,qian,sun,li,zhou,存储地址,数据(date),指针(next),线性表,1,li,序列:zhao,qian,sun,li,zhou,wu,zheng,wang,43,7,qian,13,13,sun,1,19,wang,null,25,wu,37,31,zhao,7,37,zheng,19,43,zhou,25,头指针31,内存中的存储方式,线性表的链式存储结构,循环链表(1)单循环链表在单链表中,将终端结点的指针域NULL改为指向表头结点或开始结点即可。,小结:(1)线性表的顺序存储与链式存储比较,顺序:优查找结点方便缺进行插入和删除时,需要花费大量的时间来移动数据存储规模过大时难于预先估计空间,过大造成空间浪费,过小又会使数据溢出.,链式:优进行数据的删除和插入时只需要修改指针即可,非常方便.当存储规模较大时,动态分配不连续的内存空间,不会造成浪费.缺查找某个结点需要从头指针起顺着链扫描才能取到.,(2).链式存储是最常用的存储方式之一,它不仅可用来表示线性表,而且可用来表示各种非线性的数据结构。,线性结构,栈和队列,1、栈的定义栈(Stack)是限制仅在表的一端进行插入和删除运算的线性表。(1)通常称插入、删除的这一端为栈顶(Top),另一端称为栈底(Bottom)。(2)当表中没有元素时称为空栈。(3)栈为后进先出(LastInFirstOut)的线性表,简称为LIFO表。栈的修改是按后进先出的原则进行。每次删除(退栈)的总是当前栈中最新的元素,即最后插入(进栈)的元素,而最先插入的是被放在栈的底部,要到最后才能删除。,设栈S的初始状态为空,元素a,b,c,d,e,f,g依次入栈,以下出栈序列不可能出现的是()。A.a,b,c,e,d,f,gB.b,c,a,f,e,g,dC.a,e,d,c,b,f,gD.d,c,f,e,b,a,gE.g,e,f,d,c,b,a,递归,E,栈和队列,2、队列的定义队列(Queue)是只允许在一端进行插入,而在另一端进行删除的运算受限的线性表(1)允许删除的一端称为队头(Front)。(2)允许插入的一端称为队尾(Rear)。(3)当队列中没有元素时称为空队列。(4)队列亦称作先进先出(FirstInFirstOut)的线性表,简称为FIFO表。队列的修改是依先进先出的原则进行的。新来的成员总是加入队尾(即不允许加塞),每次离开的成员总是队列头上的(不允许中途离队),即当前最老的成员离队。,某例题:车站呈狭长形,宽度只能容下一台车,并且只有一个出入口。已知某时该车站站台为空,从这一时刻开始出入记录为:“进出进进出进进进出出进出”。假设车辆入站的顺序为1,2,3,则车辆出站的顺序为()A、1,2,3,4,5B、1,2,4,5,7C、1,3,5,4,6D、1,3,5,6,7E、1,3,6,5,7,栈,E,已知队列(13,2,11,34,41,77,5,7,18,26,15),第一个进入队列的元素是13,则第五个出队列的元素是()。A)5B)41C)77D)13E)18,B,线性结构,数组,(1)一维数组:向量,(2)多维数组,1.矩阵的存储,M个行向量,N个列向量,2.矩阵地址计算,LOC(aij)=LOC(a11)+(i-1)j+j-1d,A,1、树的定义树(Tree)是n(n0)个结点的有限集T,T为空时称为空树,否则它满足如下两个条件:(1)有且仅有一个特定的称为根(Root)的结点;(2)其余的结点可分为m(m0)个互不相交的子集Tl,T2,Tm,其中每个子集本身又是一棵树,并称其为根的子树(Subree)。,注意:树的递归定义刻画了树的固有特性:一棵非空树是由若干棵子树构成的,而子树又可由若干棵更小的子树构成。,2.树的表示,(1)树形图表示树形图表示是树结构的主要表示方法。树的树形图表示中:结点用圆圈表示,结点的名字写在圆圈旁边(有时亦可写在圆圈内)。,(1)孩子(Child)和双亲(Parents)树中某个结点的子树之根称为该结点的孩子(Child)或儿子,相应地,该结点称为孩子的双亲(Parents)或父亲。同一个双亲的孩子称为兄弟(Sibling)。,(2)祖先(Ancestor)和子孙(Descendant),若树中结点k到ks存在一条路径,则称k是ks的祖先(Ancestor),ks是k的子孙(Descendant)。一个结点的祖先是从根结点到该结点路径上所经过的所有结点,而一个结点的子孙则是以该结点为根的子树中的所有结点。约定:结点k的祖先和子孙不包含结点k本身。,(3)结点的度(Degree)树中的一个结点拥有的子树数称为该结点的度(Degree)。一棵树的度是指该树中结点的最大度数。度为零的结点称为叶子(Leaf)或终端结点。度不为零的结点称分支结点或非终端结点。除根结点之外的分支结点统称为内部结点。,(4)结点的层数(Level)和树的高度(Height)结点的层数(Level)从根起算:根的层数为1其余结点的层数等于其双亲结点的层数加1。双亲在同一层的结点互为堂兄弟。树中结点的最大层数称为树的高度(Height)或深度(Depth)。,树,3.树的基本术语,(5)有序树(OrderedTree)和无序树(UnoderedTree)若将树中每个结点的各子树看成是从左到右有次序的(即不能互换),则称该树为有序树(OrderedTree);否则称为无序树(UnoderedTree),(6)森林(Forest)森林(Forest)是m(m0)棵互不相交的树的集合。树和森林的概念相近。删去一棵树的根,就得到一个森林;反之,加上一个结点作树根,森林就变为一棵树。,树形结构,二叉树,(1)二叉树的递归定义二叉树(BinaryTree)是n(n0)个结点的有限集,它或者是空集(n=0),或者由一个根结点及两棵互不相交的、分别称作这个根的左子树和右子树的二叉树组成。,(2)二叉树的五种基本形态二叉树可以是空集;根可以有空的左子树或右子树;或者左、右子树皆为空。二叉树的五种基本形态如下图所示。,思考:三个结点的二叉树有几种?,二叉树,二叉树具有以下重要性质:性质1二叉树第i层上的结点数目最多为2i-1(i1)。推导:显然!性质2深度为k的二叉树至多有2k-1个结点(k1)。推导:等比数列求和.性质3在任意-棵二叉树中,若终端结点的个数为n0,度为2的结点数为n2,则no=n2+1。推导:,(1)满二叉树(FullBinaryTree)一棵深度为k且有2k-1个结点的二又树称为满二叉树。满二叉树的特点:(1)每一层上的结点数都达到最大值。即对给定的高度,它是具有最多结点数的二叉树。(2)满二叉树中不存在度数为1的结点,每个分支结点均有两棵高度相同的子树,且树叶都在最下一层上。,思考:满二叉树第I(I=1)层上的结点数目为(),2i-1,深度为k的满二叉树有()个结点(k1),2k-1,(2)完全二叉树(CompleteBinaryTree)若一棵二叉树至多只有最下面的两层上结点的度数可以小于2,并且最下一层上的结点都集中在该层最左边的若干位置上,则此二叉树称为完全二叉树。特点:(1)满二叉树是完全二叉树,完全二叉树不一定是满二叉树。(2)在满二叉树的最下一层上,从最右边开始连续删去若干结点后得到的二叉树仍然是一棵完全二叉树。(3)在完全二叉树中,若某个结点没有左孩子,则它一定没有右孩子,即该结点必是叶结点。,不是完全二叉树,二叉树,二叉树的存储,启发,一般二叉树的顺序存储,二叉树,分析:优点和缺点对完全二叉树而言,顺序存储结构既简单又节省存储空间。一般的二叉树采用顺序存储结构时,虽然简单,但易造成存储空间的浪费。最坏的情况下,一个深度为k且只有k个结点的右单支树需要2k-1个结点的存储空间。在对顺序存储的二叉树做插入和删除结点操作时,要大量移动结点。,(1)遍历概念所谓遍历(Traversal)是指沿着某条搜索路线,依次对树中每个结点均做一次且仅做一次访问。访问结点所做的操作依赖于具体的应用问题。遍历是二叉树上最重要的运算之一,是二叉树上进行其它运算之基础。,(2)遍历的方法,1中序遍历的递归算法定义:若二叉树非空,则依次执行如下操作:(1)遍历左子树;(2)访问根结点;(3)遍历右子树。,左-根-右,中序遍历序列:DBAECF,2先序遍历的递归算法定义:若二叉树非空,则依次执行如下操作:(1)访问根结点;(2)遍历左子树;(3)遍历右子树。,先序遍历序列:ABDCEF,3后序遍历得递归算法定义:若二叉树非空,则依次执行如下操作:(1)遍历左子树;(2)遍历右子树;(3)访问根结点。,后序遍历序列:DBEFCA,根-左-右,左-右-根,中序:左根右/,先序:根左右/,后序:左右根/,概念(1):树的路径长度,树的路径长度是从树根到树中每一结点的路径长度之和。在结点数目相同的二叉树中,完全二叉树的路径长度最短。,概念(2):树的带权路径长度(WeightedPathLengthofTree,简记为WPL),结点的权:在一些应用中,赋予树中结点的一个有某种意义的实数。,结点的带权路径长度:结点到树根之间的路径长度与该结点上权的乘积。,树的带权路径长度(WeightedPathLengthofTree):定义为树中所有叶结点的带权路径长度之和,通常记为:其中:n表示叶子结点的数目wi和li分别表示叶结点ki的权值和根到结点ki之间的路径长度。树的带权路径长度亦称为树的代价。,【例】给定4个叶子结点a,b,c和d,分别带权7,5,2和4。构造如下图所示的三棵二叉树,它们的带权路径长度分别为:,(a)WPL=7*2+5*2+2*2+4*2=36(b)WPL=7*3+5*3+2*1+4*2=46(c)WPL=7*1+5*2+2*3+4*3=35,同等条件下,C图二叉树的带权路径长度最短将C称为最优二叉树或哈夫曼树,最优二叉树或哈夫曼树的定义在权为wl,w2,wn的n个叶子所构成的所有二叉树中,带权路径长度最小(即代价最小)的二叉树称为最优二叉树或哈夫曼树。,结论:(1)最优二叉树中,权越大的叶子离根越近。(2)最优二叉树的形态不唯一,WPL最小(3)叶子上的权值均相同时,完全二叉树一定是最优二叉树,哈夫曼首先给出了对于给定的叶子数目及其权值构造最优二叉树的方法,故称其为哈夫曼算法。其基本思想是:(1)根据给定的n个权值wl,w2,wn构成n棵二叉树的森林F=T1,T2,Tn,其中每棵二叉树Ti中都只有一个权值为wi的根结点,其左右子树均空。(2)在森林F中选出两棵根结点权值最小的树(当这样的树不止两棵树时,可以从中任选两棵),将这两棵树合并成一棵新树,为了保证新树仍是二叉树,需要增加一个新结点作为新树的根,并将所选的两棵树的根分别作为新根的左右孩子(谁左,谁右无关紧要),将这两个孩子的权值之和作为新树根的权值。(3)对新的森林F重复(2),直到森林F中只剩下一棵树为止。这棵树便是哈夫曼树。,例题,二叉树,构造最优二叉树(哈夫曼树),哈夫曼算法,例题:已
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年南昌农商银行中层管理岗位人员招聘5人备考题库及完整答案详解一套
- 2026年中国科学院高能物理研究所财务会计岗招聘备考题库及答案详解一套
- 2026年浙江招聘恒信农商银行专职清非人员的备考题库及答案详解(考点梳理)
- 甘肃银行2026年度校园招聘备考题库及答案详解参考
- 昌吉州检察机关2026年面向社会公开招聘聘用制书记员备考题库参考答案详解
- 海盐农商银行2025社会招聘备考题库及答案详解参考
- 2026年华润水泥(昌江)有限公司土建管理岗招聘备考题库及参考答案详解一套
- 2025年智能电网建设改造行业报告
- 地源热泵2025年五年技术发展报告
- 2026年昆明市官渡区云南大学附属中学星耀学校招聘备考题库及答案详解参考
- 办公室转租合同协议书
- 《山海经》全文及译文
- 海外采矿合作协议书
- 武装工作总结(5篇)
- 2025版小学语文课程标准解读
- 寄售行管理制度
- JJF 2145-2024场所监测用固定式X、γ辐射剂量率监测仪校准规范
- 微生物发酵技术在个人护理品中的应用-洞察分析
- 【MOOC】分子生物学-华中农业大学 中国大学慕课MOOC答案
- 2024年协会工作年终总结(2篇)
- 广西桂林市2023-2024学年七年级上学期语文期末试卷(含答案)
评论
0/150
提交评论