首页 置换 选车 估价 问答 生活 经销商 车管所 汽车资讯 汽车销量 车牌查询 今日油价 天气预报
您的位置: 首页 > 生活 > 科技 > 数据结构的四种基本存储方式(数据结构树的存储结构)
数据结构的四种基本存储方式(数据结构树的存储结构)
更新时间:2024-07-04 20:34:28
一、存储结构

顺序存储结构,用一段地址连续的存储单元依次存储线性表的数据元素。存储的元素之间是一对一的关系,但是在树形结构中元素之间是一对多的关系。

树中某个结点的孩子可以有多个,则无论按何种顺序将树中所有结点存储到数组中,结点的存储位置都无法直接反映逻辑关系。简单说就是我们单纯地按照数组存储,我们将无法知道每个元素的双亲、孩子节点是谁。所以单纯的顺序存储结构是不能满足树的实现要求的。

不过我们可以利用顺序存储和链式存储结构的特点,完全可以实现对树的存储结构的表示。我们这里要介绍三种不同的表示法:双亲表示法 、孩子表示法、孩子兄弟表示法。

数据结构的四种基本存储方式(数据结构树的存储结构)1

树的存储结构

二、双亲表示法

树形结构,除了根结点外,其余每个结点,它不一定有孩子,但是一定有且仅有一个双亲亲。我们假设以一组连续空间存储树的结点,同时在每个结点中设置一个指示器,指示其双亲结点到链表中的位置。也就是说每个节点除了知道自己是谁以外,还必须知道它的双亲是谁。

数据结构的四种基本存储方式(数据结构树的存储结构)2

双亲表示法

Data是该节点的数据域;parent 是该节点指向双亲节点的指针域;

class Node<T>{ //数据 T data; //双亲节点的下标 int parent; } class Tree{ //数组的大小 int max_size=10; //数组容器 Node [] nodes=new Node[max_size]; //根节点的下标 int root; }

有了结构的定义,我们就可以来实现双亲表示法了。由于根结点是没有双亲,所以我们约定根结点的位置域设置为-1,这也就意味着,我们所有的结点都存有双亲的位置。

数据结构的四种基本存储方式(数据结构树的存储结构)3

双亲表示法

这样的存储结构,我们可以根据结点的 parent 指针很容易找到他的双亲结点,所用的时间复杂度为 0(1),直到 parent等于-1时,表示找到了树结点的根。但是我们要知道结点的孩子是谁,我们只能遍历整个数组才行。我们可以增加指向左孩子的指针域,或者增加指向右孩子的指针域。如下图双亲表示法增加左孩子节点的指针

数据结构的四种基本存储方式(数据结构树的存储结构)4

双亲表示法增加左孩子节点

三、孩子表示法

孩子表示法就是先用数组存储每个节点,然后用单链表把每个节点的子节点串联起来。会编程的小伙伴都知道 Map 的数据结构。树的孩子表示法非常类似于 Map 的数据结构。

数据结构的四种基本存储方式(数据结构树的存储结构)5

节点的存储结果

其中Data是数据域,存储某节点的数据信息。 FirstChild是头指针域,存储该结点的孩子链表的头指针。

数据结构的四种基本存储方式(数据结构树的存储结构)6

孩子节点的结构

child是数据域,存储某个结点在表头数组中的下标。next是指针域,用来存储某结点的下一个孩子结点的指针。

数据结构的四种基本存储方式(数据结构树的存储结构)7

孩子表示法

四、孩子兄弟表示法

任何一棵树,它的结点的第一个孩子如果是唯一的,它的右兄弟如果存在也是唯一的,因此,我们设置两个指针,分别指向该结点的第一个孩子和此结点的右兄弟。

数据结构的四种基本存储方式(数据结构树的存储结构)8

孩子兄弟表示法

data是数据域,firstchild为指针域,存储第一个孩子结点的地址,rightsib是指针域,存储该结点的右兄弟的地址。

数据结构的四种基本存储方式(数据结构树的存储结构)9

孩子兄弟表示法

这种方法给查找某结点的某个孩子带来了方便,只需要通过firstchild 找到此结点的左儿子,然后再通过左儿子找到二弟,一直下去,直到找到具体的孩子。当然,如果想要找到双亲,完全可以增加一个parent 指针域来解决。参考《大话数据结构》 #以书之名#

,
相关推荐RECOMMEND
电脑广告弹窗怎么解决(电脑广告弹窗的解决方法)
电脑广告弹窗怎么解决?方法一:按下“win+r”打开运行,输入“msconfig”随后在弹出的“系统配置”中点击“服务”将一直弹出的广告服务项关闭即可解决,下面我们就来说一说关于电脑广告弹窗怎么解决?...
手机被监控通话会知道位置吗(简介手机被监控通话会知道位置吗)
手机被监控通话会知道位置吗?会知道首先,在使用手机的过程中,手机会有所卡顿,比如说我们下载软件的时候,不是在手机的官方商店下载,而是随便在网上下载或者说是随便点击一个链接进行下载,这样就很容易导致我们...
刺激战场健康系统怎么解除(来看看了解一下)
刺激战场健康系统怎么解除?实名注册资料一旦填写确认,无法随意更改或解除,我来为大家科普一下关于刺激战场健康系统怎么解除?下面希望有你要的答案,我们一起来看看吧!刺激战场健康系统怎么解除实名注册资料一旦...
诛仙手游情缘笺怎么编辑(重新卸载安装)
诛仙手游情缘笺怎么编辑?通过下载最新客户端解决此问题《诛仙情缘》是一款游戏,游戏的类型是奇幻修真诛仙情缘是一款中式玄幻题材的回合制多人角色扮演类手机游戏,游戏场景画面多变,画风十分绚丽,即时网游的对战...
微信数据损坏怎么回事(微信数据损坏解决办法)
微信数据损坏怎么回事?删除多余App,保证手机内存1G很多时候,微信出现闪退或者其他BUG,其实是由于手机内存不足而引发的,因此我们可以预留足够的内存空间,重启手机再打开微信进行尝试,我来为大家科普一...
电脑状态0xc0000221怎么解决(电脑状态0xc0000221的解决方法)
电脑状态0xc0000221怎么解决?开机蓝屏出现0xc0000221错误,原因是系统文件丢失,可能是误删,可能是其他原因,找到一台跟自己电脑系统一样的,将\windows\system32\driv...