当前位置:首页 » 服务存储 » 树适合存储什么结构的数据
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

树适合存储什么结构的数据

发布时间: 2022-11-16 04:52:14

1. 数据结构中树的存储问题

在树结构中有双亲表示法、孩子表示法、孩子兄弟表示法等,其中双亲表示法,属顺序存储结构,孩子表示法、孩子兄弟表示法以属链式存储

2. 数据结构,树的常用存储方式

存入文本文件,每行:孩子节点-父节点。
这样也方便用Hadoop进行处理。

3. 完全二叉树用什么数据结构实现最合适,为什么

一般的二叉树用带有两个指向自身结构类型变量的指针的多个结构体组成最合适。
如果该二叉树不会变化,可以用数组实现,每个数组元素表示一个节点,因为是完全的,所以长度一定是2的n次方-1,n为树的深度,也可以很方便地算出某个元素与树根节点、父节点等的关系,因此不用指针反而可以减少存储开销及查询效率。

4. 有关数据结构二叉树存储结构类型的,求助大神解答

图中的第一行是定义了一个叫做DataType的类型就是char类型。 接下来定义了一个叫做BinTNode的二叉树结点类型,它包含一个字符型的数据,还有两个指向左右子树的指针。 第三个定义数据类型是定义了一个指向二叉树节点的指针叫做BinTree。 接下来的一个无返回值的函数f31( ),是一个先正向打印从根结点到最左下角结点的路径,再反向打印一遍此路径。 若二叉树如图中所示,则调用f31(T)的输出结果为: ABDDBA

5. 【数据结构】树的定义和树的三种存储结构

树(Tree)是n(n>=0)个结点的有限集。n=0时称为空树。在任意一颗非空树中:

假设以一组连续空间存储数的结点,同时在每个结点中, 附设一个指示器指示其双亲结点到链表中的位置

把每个结点的孩子结点排列起来,以 单链表作为存储结构 ,则n个结点有n个孩子链表,如果是叶子结点则此单链表为空。然后 n个头指针又组成一个线性表,采用顺序存储结构 ,存放进一个一维数组中。

孩子表示法有两种结点结构: 孩子链表的孩子结点 表头数组的表头结点

对于孩子表示法,查找某个结点的某个孩子,或者找某个结点的兄弟,只需要查找这个结点的孩子单链表即可。但是 当要寻找某个结点的双亲时 ,就不是那么方便了。所以可以将双亲表示法和孩子表示法结合,形成 双亲孩子表示法

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

6. 二叉树是非线性数据结构,所以

二叉树是非线性数据结构,所以(C、它能采用顺序存储结构和链式存储结构存储)。

一般而言,完全二叉树(包括满二叉树)使用顺序存储,普通二叉树一般用二叉链表或者三叉链表存储。

二叉树是n个有限元素的集合,该集合或者为空、或者由一个称为根的元素及两个不相交的、被分别称为左子树和右子树的二叉树组成,是有序树。当集合为空时,称该二叉树为空二叉树。在二叉树中,一个元素也称作一个结点。



(6)树适合存储什么结构的数据扩展阅读:

若对一棵有n个节点的完全二叉树进行顺序编号(1≤i≤n),那么,对于编号为i(i≥1)的节点:

当i=1时,该节点为根,它无双亲节点。

当i>1时,该节点的双亲节点的编号为i/2。

若2i≤n,则有编号为2i的左节点,否则没有左节点 。

若2i+1≤n,则有编号为2i+1的右节点,否则没有右节点。

7. C语言中.二叉树的顺序存储结构和二叉链表,三叉链表存储结构各自的优缺点及适用场合.以及2叉树的顺序储存结

链式结构优点都是便于寻址,二叉链表缺点结构性开销随着数据结构的规模变大而变大(尤其是叶子节点都有2个NULL,即损失2*sizeof(ElemType*))
线性结构优点没有结构性开销,缺点个人感觉是插入和删除不够方便?
试用场合估计取决问题规模大小,即空间复杂度和时间复杂度
两个相互转化很简单,只需明白的就是顺序存储中:
当前节点的父节点Parent(CurrentPos) = (CurrentPos - 1) / 2 取下界
左孩子Left(CurrentPos) = 2*CurrentPos + 1
右孩子Right(CurrentPos) = 2*CurrentPos + 2
左兄弟 = CurrentPos - 1
右兄弟 = CurrentPos + 1
转换时只需讲链式存储结构的数据域的数据拷贝到顺序存储结构对应的位置即可

8. 顺序存储是二叉树常用的存储结构吗

二叉树的存储结构
二叉树是非线性结构,即每个数据结点至多只有一个前驱,但可以有多个后继。它可采用顺序存储结构和链式存储结构。
1.顺序存储结构
二叉树的顺序存储,就是用一组连续的存储单元存放二叉树中的结点。因此,必须把二叉树的所有结点安排成为一个恰当的序列,结点在这个序列中的相互位置能反映出结点之间的逻辑关系,用编号的方法从树根起,自上层至下层,每层自左至右地给所有结点编号,缺点是有可能对存储空间造成极大的浪费,在最坏的情况下,一个深度为k且只有k个结点的右单支树需要2k-1个结点存储空间。依据二叉树的性质,完全二叉树和满二叉树采用顺序存储比较合适,树中结点的序号可以唯一地反映出结点之间的逻辑关系,这样既能够最大可能地节省存储空间,又可以利用数组元素的下标值确定结点在二叉树中的位置,以及结点之间的关系。图5-5(a)是一棵完全二叉树,图5-5(b)给出的图5-5(a)所示的完全二叉树的顺序存储结构。

(a) 一棵完全二叉树 (b) 顺序存储结构
图5-5 完全二叉树的顺序存储示意图
对于一般的二叉树,如果仍按从上至下和从左到右的顺序将树中的结点顺序存储在一维数组中,则数组元素下标之间的关系不能够反映二叉树中结点之间的逻辑关系,只有增添一些并不存在的空结点,使之成为一棵完全二叉树的形式,然后再用一维数组顺序存储。如图5-6给出了一棵一般二叉树改造后的完全二叉树形态和其顺序存储状态示意图。显然,这种存储对于需增加许多空结点才能将一棵二叉树改造成为一棵完全二叉树的存储时,会造成空间的大量浪费,不宜用顺序存储结构。最坏的情况是右单支树,如图5-7 所示,一棵深度为k的右单支树,只有k个结点,却需分配2k-1个存储单元。

(a) 一棵二叉树 (b) 改造后的完全二叉树

(c) 改造后完全二叉树顺序存储状态
图5-6 一般二叉树及其顺序存储示意图

(a) 一棵右单支二叉树 (b) 改造后的右单支树对应的完全二叉树

(c) 单支树改造后完全二叉树的顺序存储状态
图5-7 右单支二叉树及其顺序存储示意图
结构5-1二叉树的顺序存储

#define Maxsize 100 //假设一维数组最多存放100个元素
typedef char Datatype; //假设二叉树元素的数据类型为字符
typedef struct
{ Datatype bt[Maxsize];
int btnum;
}Btseq;

2.链式存储结构
二叉树的链式存储结构是指,用链表来表示一棵二叉树,即用链来指示元素的逻辑关系。
通常的方法是链表中每个结点由三个域组成,数据域和左右指针域,左右指针分别用来给出该结点左孩子和右孩子所在的链结点的存储地址。其结点结构为:

其中,data域存放某结点的数据信息;lchild与rchild分别存放指向左孩子和右孩子的指针,当左孩子或右孩子不存在时,相应指针域值为空(用符号∧或NULL表示)。利用这样的结点结构表示的二叉树的链式存储结构被称为二叉链表,如图5-8所示。

(a) 一棵二叉树 (b) 二叉链表存储结构
图5-8 二叉树的二叉链表表示示意图
为了方便访问某结点的双亲,还可以给链表结点增加一个双亲字段parent,用来指向其双亲结点。每个结点由四个域组成,其结点结构为:

这种存储结构既便于查找孩子结点,又便于查找双亲结点;但是,相对于二叉链表存储结构而言,它增加了空间开销。利用这样的结点结构表示的二叉树的链式存储结构被称为三叉链表。
图5-9给出了图5-8 (a)所示的一棵二叉树的三叉链表表示。

图5-9二叉树的三叉链表表示示意图
尽管在二叉链表中无法由结点直接找到其双亲,但由于二叉链表结构灵活,操作方便,对于一般情况的二叉树,甚至比顺序存储结构还节省空间。因此,二叉链表是最常用的二叉树存储方式。
结构5-2二叉树的链式存储
#define datatype char //定义二叉树元素的数据类型为字符
typedef struct node //定义结点由数据域,左右指针组成
{ Datatype data;
struct node *lchild,*rchild;
}Bitree;

9. 树什么结构

您要问的是树是什么字形结构吗?
树是左中右结构,树是具有木质树干及树枝的植物,可存活很多年。一般将乔木称为树,主干,植株,分枝距离地面较高,可以形成树冠,树有很多种品类。
文言版《说文解字》中说道:树,生植之緫名。从木,尌声。籀文树字。白话版《说文解字》中则说道:树,播种、培育、种植等农事的总称。字形采用“木”作边旁,采用“尌”作声旁。这个就是籀文写法中所说的“树”字。