非线性数据结构精选PPT.ppt
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《非线性数据结构精选PPT.ppt》由会员分享,可在线阅读,更多相关《非线性数据结构精选PPT.ppt(100页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、非线性数据结构非线性数据结构第1页,此课件共100页哦3.1数数组组3.1.1引言数数组组是是大大家家已已经经很很熟熟悉悉的的一一种种数数据据类类型型,几几乎乎所所有的程序设计语言都把数组类型设定为固有类型。有的程序设计语言都把数组类型设定为固有类型。数组(array)可可看看成成是是线线性性表表的的推推广广,是是最最常常用用的的数数据据结结构构之之一一。数数组组是是有有限限个个数数组组元元素素的的集集合合;数数组组的的每每个个元元素素与与一一组组下下标标相相对对应应;和和线线性性表表一一样样,数数组组中中所所有有数组元素的数据类型必须一致。数组元素的数据类型必须一致。第2页,此课件共100页
2、哦3.1.2数组的逻辑结构数组的逻辑结构逻辑关系是非线性的,实质上是多个线性关系的组合。逻辑关系是非线性的,实质上是多个线性关系的组合。Amn=a11a12.a1na21a22.a2nam1am2.amn如下所示,就是一个如下所示,就是一个m行行n列的二维数组列的二维数组(也称为矩阵也称为矩阵),记作,记作Am,n。第3页,此课件共100页哦矩矩阵阵A可可以以看看成成是是由由m个个行行向向量量组组成成的的向向量量,也也可可以以看看成是由成是由n个列向量组成的向量。个列向量组成的向量。在在矩矩阵阵A A中中,每每个个元元素素a aijij都都属属于于两两个个线线性性表表。一一个个是是第第i i行
3、行的的行表(a(ai1i1,a ai2i2,.,a aijij,.,a ainin),另另一一个个是是第第j j列列的的列表(a(a1j1j,a a2j2j,.,a aijij,.,a amjmj)。这这种种行行表表(行行向向量量)和和列列表表(列向量列向量)都相当于线性表都相当于线性表。所所以以说说,数组可看作是线性表的推广,将将线线性性表表推推广广到二维或高维,就是我们所说的数组。到二维或高维,就是我们所说的数组。第4页,此课件共100页哦3.1.3数组的存储结构数组的存储结构数数组组的的顺顺序序分分配配就就是是用用向向量量作作为为数数组组的的存存储储结结构构。但但是是二二维维以以上上的的
4、多多维维数数组组,不不像像一一维维数数组组那那样样,所所有有的的元元素素已已经经排排成成一一个个序序列列,所所以以要要把把多多维维数数组组顺顺序序地地存存储储到到一一维维顺顺序序的的存存储储器器中中,则则必必须须对对多多维维数数组组里里的的元元素素存存放顺序做出一些规定。放顺序做出一些规定。通常数组采用通常数组采用两种顺序存储方式。第5页,此课件共100页哦1)行优先顺序存储行优先顺序存储行优先顺序存储就是就是数组元素按行表次序进行存储,即数组元素按行表次序进行存储,即第第i+1i+1个行表紧跟在第个行表紧跟在第i i个行表后面进行存储个行表后面进行存储。在在C、BASIC、PASCAL、CO
5、BOL等高级语言中均采用这种方法。等高级语言中均采用这种方法。以以二二维维数数组组Amn为为例例,按按行行优优先先顺顺序序存存储储的的数数组组元元素次序为:素次序为:a11,a12,a1n,a21,a22,a2n,am1,am2,amn第6页,此课件共100页哦2)列优先顺序存储列优先顺序存储列优先顺序存储就是就是数组元素按列表次序进行存储,数组元素按列表次序进行存储,即第即第j+1j+1个列表紧跟在第个列表紧跟在第j j个列表后面进行存储个列表后面进行存储。在。在FORTRAN语言中,数组是按列优先顺序组织存储。语言中,数组是按列优先顺序组织存储。以以二二维维数数组组Amn为为例例,按按列列
6、优优先先顺顺序序存存储储的的数数组组元元素素次次序序为:为:a11,a21,am1,a12,a22,am2,a1n,a2n,amn第7页,此课件共100页哦二维数组的两种存储方式二维数组的两种存储方式第8页,此课件共100页哦同同样样,对对n维数组也也有有上上述述两两种种不不同同的的顺顺序序分分配配的的存存储储结结构构。当当把把n n维维数数组组的的元元素素这这样样顺顺序序地地存存放放在在存存储储器器里里,则则每每个个元元素素的的存存储储地地址址可可以以用用公公式式计计算算出出来来。这些计算公式称为这些计算公式称为“地址公式”。假设每个数据元素占假设每个数据元素占k个存储单元,则可得个存储单元
7、,则可得(1)一维数组的地址公式为:的地址公式为:Loc(ai)=Loc(a1)+(i-1)*k(2)若若存存储储分分配配采采用用行优先顺顺序序分分配配,则则二维数组Amn的地址公式为:的地址公式为:Loc(aij)=Loc(a11)+(i-1)*n+(j-1)*k第9页,此课件共100页哦同同理理,可可写写出出三维数组、n维数组的的数数组组元元素素存储地址的计算公式。存储地址的计算公式。(3)若若存存储储分分配配采采用用列优先顺顺序序分分配配,则则二维数组Amn的地址公式为:的地址公式为:Loc(aij)=Loc(a11)+(j-1)*m+(i-1)*L同同理理,可可写写出出三维数组、n维数
8、组的的数数组组元元素素存储地址的计算公式。存储地址的计算公式。第10页,此课件共100页哦3.1.4特殊矩阵的压缩存储特殊矩阵的压缩存储假假若若值值相相同同的的元元素素或或零零元元素素在在矩矩阵阵中中的的分分布布有有一一定定规规律律,则则称称此此类类矩矩阵阵为为特殊矩阵。像像三三角角矩矩阵阵,对对称称矩矩阵、三对角矩阵等阵、三对角矩阵等都属于特殊矩阵。都属于特殊矩阵。通通常常在在实实际际计计算算中中经经常常出出现现一一些些阶阶数数很很高高的的矩矩阵阵,同同时时矩矩阵阵中中有有许许多多值值相相同同的的元元素素或或者者零零元元素素。有有时时为为了了节节省省存存储储空空间间,可可以以对对这这类类矩矩
9、阵阵进进行行压压缩缩存存储储。所所谓谓压缩存储是是指指:为为多多个个值值相相同同的的元元素素只只分分配配一一个个存存储储空空间间;对对零零元元素素不不分分配配空空间间。第11页,此课件共100页哦1)三角矩阵)三角矩阵例:下三角矩阵例:下三角矩阵Ann,当,当i1,则则其双亲是结点。其双亲是结点。(2)如果如果2in,则结点,则结点i无左孩子;否则其左孩子是无左孩子;否则其左孩子是2i。(3)如如果果2i+1n,则则结结点点i无无右右孩孩子子;否否则则其其右右孩孩子子是是结结点点2i+1。证明从略。证明从略。第33页,此课件共100页哦3、满二叉树和完全二叉树的关系、满二叉树和完全二叉树的关系
10、满二叉树满二叉树=完全二叉树完全二叉树满二叉树满二叉树完全二叉树完全二叉树4、平衡二叉树、平衡二叉树二二叉叉树树上上任任一一结结点点的的左左子子树树深深度度减减去去右右子子树树深深度度的的差差值值,称称为此结点的平衡因子。为此结点的平衡因子。若若一一棵棵二二叉叉树树中中,每每个个结结点点的的平平衡衡因因子子之之绝绝对对值值都都不不大大于于1,则则称这棵二叉树为平衡二叉树。称这棵二叉树为平衡二叉树。(a)是平衡二叉树是平衡二叉树(b)不是平衡二叉树不是平衡二叉树第34页,此课件共100页哦 3.2.3.3 二叉树的存储结构二叉树的存储结构对对于于二二叉叉树树,我我们们既既可可采采用用顺顺序序存存
11、储储,又又可可采采用用链链式存储。式存储。1顺序存储结构顺序存储结构顺顺序序存存储储就就是是将将一一棵棵二二叉叉树树的的所所有有结结点点按按照照一一定定的的次次序序顺顺序序存存放放到到一一组组连连续续的的存存储储单单元元中中,为为此此,必必须须把把二二叉叉树树中中所所有有结结点点构构成成一一个个适适当当的的线线性性序序列列,以以使使各各个个结结点点在在这这个个序序列列中中的的相相互互位位置置能能反反映映出出结结点点之之间的逻辑关系。间的逻辑关系。第35页,此课件共100页哦对于完全二叉树,按图的编号顺序,就能得到一对于完全二叉树,按图的编号顺序,就能得到一个足以反映整个二叉树结构的线性序列。因
12、此,可将个足以反映整个二叉树结构的线性序列。因此,可将完全二叉树中所有结点按编号顺序依次存储到一组连完全二叉树中所有结点按编号顺序依次存储到一组连续的存储单元续的存储单元(即向量即向量)中,这样既不浪费内存,又可以中,这样既不浪费内存,又可以利用地址公式确定其结点的位置。利用地址公式确定其结点的位置。1234567ABDEFCJ第36页,此课件共100页哦但对于一般的二叉树,顺序分配常会造成内存的浪费,但对于一般的二叉树,顺序分配常会造成内存的浪费,因为一般的二叉树也必须按完全二叉树的形式来存储。因为一般的二叉树也必须按完全二叉树的形式来存储。1234567891011ABDEFCJGH第37
13、页,此课件共100页哦 2链式存储结构链式存储结构因为树型结构是非线性的结构,所以在存储器里因为树型结构是非线性的结构,所以在存储器里表示树型结构的最自然的方法是链式存储。根据二叉表示树型结构的最自然的方法是链式存储。根据二叉树的特性,任何一个结点最多有左、右两棵子树,所树的特性,任何一个结点最多有左、右两棵子树,所以每个结点至少设有三个域:数据域和左、右指针域。以每个结点至少设有三个域:数据域和左、右指针域。其结点结构为:其结点结构为:lchilddatarchild第38页,此课件共100页哦第39页,此课件共100页哦二叉链表结点的类型定义二叉链表结点的类型定义typedefstruct
14、nodedatatypedata;structnode*lchild,*rchild;bstree;第40页,此课件共100页哦3.2.3.4 二叉树的遍历二叉树的遍历遍历二叉树就是按一定的次序,系统地访问树中的所有结点,使每个结点恰好被访问一次。所谓访问结点,其含义是很广的,可以理解为对结点的增、删、修改等各种运算的抽象。在本节讨论中,假定访问结点即为输出结点数据域值。二叉树的遍历是最重要和最基本的运算,二叉树的许多操作都是以遍历为基础的。按照对二叉树中根结点、左子树和右子树访问的先后顺序,共有三种遍历二叉树的方法:根、左、右;左、根、右;左、右、根根据这三种方法中根结点被访问的先后,分别称
15、之为二叉树的先序(根)遍历,中序(根)遍历和后序(根)遍历。第41页,此课件共100页哦(1)先序遍历:先序遍历:若二叉树为空,则空操作;否则若二叉树为空,则空操作;否则访问根结点;访问根结点;先序遍历左子树;先序遍历左子树;先序遍历右子树。先序遍历右子树。遍历序列:ABDEGHCF第42页,此课件共100页哦先序遍历的算法先序遍历的算法voidpreorder(bstree*p)if(p!=NULcL)printf(“%5”,p-data);preorder(p-lchild);preorder(p-rchild);第43页,此课件共100页哦(2)中序遍历:中序遍历:若二叉树为空,则空操作
16、;否则若二叉树为空,则空操作;否则中序遍历左子树;中序遍历左子树;访问根结点;访问根结点;中序遍历右子树。中序遍历右子树。遍历序列:遍历序列:DBGEHACF第44页,此课件共100页哦中序遍历算法中序遍历算法voidpreorder(bstree*p)if(p!=NULcL)inorder(p-lchild);printf(“%5”,p-data);inorder(p-rchild);第45页,此课件共100页哦(3)后序遍历:后序遍历:若二叉树为空,则空操作;否则若二叉树为空,则空操作;否则后序遍历左子树;后序遍历左子树;后序遍历右子树。后序遍历右子树。访问根结点;访问根结点;遍历序列:D
17、GHEBFCA第46页,此课件共100页哦后序遍历算法后序遍历算法voidposorder(bstree*p)if(p!=NULcL)posorder(p-lchild);posorder(p-rchild);printf(“%5”,p-data);第47页,此课件共100页哦3.2.4 树的存储结构树的存储结构树树在在计计算算机机内内存存储储,可可以以用用顺顺序序存存储储方方式式、也也可可以以用用链链式式存存储储方方式式,这这主主要要取取决决于于要要对对树树结结构构进进行行什什么么运算。这里主要介绍链式分配的存储结构。运算。这里主要介绍链式分配的存储结构。孩子孩子-兄弟表示法的链式存储结构表
18、示如下:兄弟表示法的链式存储结构表示如下:firstdatanext链表中结点的两个指针域分别指向该结点的第一个孩子和链表中结点的两个指针域分别指向该结点的第一个孩子和下一个兄弟结点。下一个兄弟结点。第48页,此课件共100页哦RADEFCBGKHRADE CHFGBK第49页,此课件共100页哦 3.2.5 树的遍历树的遍历树树的的遍遍历历有有两两种种次次序序:一一种种是是先先序序遍遍历历树树;另一种是后序遍历树。另一种是后序遍历树。(1)先先序序遍遍历历树树:先先访访问问树树的的根根结结点点,然然后后从从左左到到右右依依次次先先序序遍遍历历根根的的每每棵棵子子树树。如如先先序序遍遍历历右右
19、图图所所示示的的树树,得得到到的的结结点点序序列为:列为:RADEBCFGHK。(2)后序遍历树:先从左到右依次后根遍历每后序遍历树:先从左到右依次后根遍历每棵子树,然后访问根结点。如后序遍历右图所示棵子树,然后访问根结点。如后序遍历右图所示的树,得到的结点序列为:的树,得到的结点序列为:DEABGHKFCR。RADEFCBGKH第50页,此课件共100页哦3.2.6 树、森林与二叉树的转换树、森林与二叉树的转换由由于于二二叉叉树树和和树树都都可可用用二二叉叉链链表表作作为为存存储储结结构构,则则以以二二叉叉链链表表作作为为媒媒介介可可导导出出树树与与二二叉叉树树之之间间的的一一个个对对应应关
20、关系系。也也就就是是说说,给给定定一一棵棵树树,可可以以找找到到惟惟一一的的一一棵棵二二叉叉树树与与之之对对应应,从从物物理理结结构构来来看看,它它们们的的二二叉叉链链表表是是相相同同的的,只只是是解解释释不不同同而而已已。图图3-15给给出出了了树树与与二二叉树之间的对应关系。叉树之间的对应关系。第51页,此课件共100页哦图3-15树与二叉树的对应关系第52页,此课件共100页哦下面给出树与二叉树之间的转换规则。下面给出树与二叉树之间的转换规则。1一般树转换为二叉树一般树转换为二叉树步骤步骤:(1)加线:亲兄弟之间加一虚连线。加线:亲兄弟之间加一虚连线。(2)抹抹线线:抹抹掉掉(除除最最左
21、左一一个个孩孩子子外外)该该结结点点到到其其余余孩孩子之间的连线。子之间的连线。(3)旋转:新加上去的虚线改实线且均向右斜旋转:新加上去的虚线改实线且均向右斜(rchild),原有的连线均向左斜,原有的连线均向左斜(lchild)。第53页,此课件共100页哦图3-16一般树转换为二叉树的操作过程(a)一般树;(b)加线后;(c)抹线后;(d)旋转后第54页,此课件共100页哦 2森林转换为二叉树森林转换为二叉树森森林林是是树树的的有有限限集集合合,利利用用树树的的转转换换思思想想,可可以以实实现森林到二叉树的转换。现森林到二叉树的转换。步骤步骤:(1)将各棵树分别转换为二叉树。将各棵树分别转
22、换为二叉树。(2)按按给给出出森森林林中中树树的的次次序序,依依次次将将后后一一棵棵二二叉叉树树作作为为前前一一棵棵二二叉叉树树根根结结点点的的右右子子树树,则则第第一一棵棵树树的的根根结结点是转换后二叉树的根。点是转换后二叉树的根。第55页,此课件共100页哦图3-17森林转换成对应的二叉树的过程(a)森林;(b)各棵树对应的二叉树;(c)转换成的二叉树第56页,此课件共100页哦3.2.7树的应用树的应用树结构被广泛地用于分类、检索、数据库及人工智能等方面。树结构被广泛地用于分类、检索、数据库及人工智能等方面。二叉排序树二叉排序树二叉排序树是一种动态树表。二叉排序树是一种动态树表。二叉排序
23、树的定义:二叉排序树或者是一棵空树,二叉排序树的定义:二叉排序树或者是一棵空树,或者是一棵具有如下性或者是一棵具有如下性质的二叉树:质的二叉树:若它的左子树非空,则左子树上所有结点的值均小于根结点的值;若它的左子树非空,则左子树上所有结点的值均小于根结点的值;若它的右子树非空,则右子树上所有结点的值均大于根结点的值;若它的右子树非空,则右子树上所有结点的值均大于根结点的值;左、右子树本身又各是一棵二叉排序树。二叉排序树的性质:左、右子树本身又各是一棵二叉排序树。二叉排序树的性质:按中序按中序遍历二叉排序树,所得到的中序遍历序列是一个递增有序序列。遍历二叉排序树,所得到的中序遍历序列是一个递增有
24、序序列。第57页,此课件共100页哦(1)二叉排序树生成:)二叉排序树生成:从空的二叉排序树开始,经过一系列的查找插入操作以后,生成了一从空的二叉排序树开始,经过一系列的查找插入操作以后,生成了一棵二叉排序树。棵二叉排序树。插入一个结点的操作按下述方法完成:插入一个结点的操作按下述方法完成:若原二叉排序树为空,则将待插结点作为此数的根结点。若原二叉排序树为空,则将待插结点作为此数的根结点。若原二叉排序树不为空,若原二叉排序树不为空,则比较待插结点和根结点的关键字值;若则比较待插结点和根结点的关键字值;若待插元素的关键字值小于根结点的的关键字值,则将其插入到左子数中;待插元素的关键字值小于根结点
25、的的关键字值,则将其插入到左子数中;否则,将其插入到右子树中;否则,将其插入到右子树中;在二叉排序树的左右子树中的插入过程同上。在二叉排序树的左右子树中的插入过程同上。例:对于一组关键字例:对于一组关键字51,34,79,18,45,86,生成对应,生成对应的二叉排序树的二叉排序树第58页,此课件共100页哦(2)二叉排序树的删除)二叉排序树的删除:假设被删结点是假设被删结点是*p,其双亲是,其双亲是*f,不失一般性,设,不失一般性,设*p是是*f的左孩子,下面分的左孩子,下面分三种情况讨论:三种情况讨论:若结点若结点*p是叶子结点,则只需修改其双亲结点是叶子结点,则只需修改其双亲结点*f的指
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 非线性 数据结构 精选 PPT
![提示](https://www.taowenge.com/images/bang_tan.gif)
限制150内