几种树的储存结构

本文详细介绍了树的几种储存结构,包括二叉树的顺序储存和链式储存,普通树的Parents表示法、孩子表示法、Parents-Children表示法及孩子兄弟法。此外,还专门讨论了Huffman树的特定储存需求,提出了适用于Huffman树的复合数组结构。
摘要由CSDN通过智能技术生成

一、二叉树

1、顺序储存结构

利用一段连续的储存空间,即数组的形式,按照满二叉树的结构,从上到下,从左到右,按顺序将元素存入数组中,空缺的元素用零补齐。对于满二叉树和完全二叉树,数组中没有零元素,空间利用率达到100%。但其余情况下空间利用率低,所以顺序储存结构最适用于完全二叉树(满二叉树可以视为完全二叉树);

2、链式储存结构

使用链表储存,链表的每个结点的储存结构为:数据域 + 左孩子指针 + 右孩子指针

这样的储存结构优势在于不论何种形式的二叉树都可以较好的利用空间,但是由于叶子结点的左右指针域都为空,没有很好的利用上。

二、树

1、Parents表示法(即书中所谓双亲表示法,这种翻译怎么看怎么奇怪)

使用一组连续的空间储存(即数组),数组中每个元素的储存结构为:数据域 + Parents地址域

将树中的所有元素按照从上到下,从左到右的顺序依次记录到数组中对应的各数据域,再将其Parents的地址(在数组中就是Parents的序号)分别存入对应的指针域。树的根没有Parents(孤儿),所以指针域置为-1或其他约定好的数字。

Parents表示法的优势在于方便找到各元素的Parents结点,但要找到某个元素的子节点就必须要遍历整个数组,时间复杂度较高。

2、孩子表

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
数据结构是计算机科学中组织和管理数据的方式,常见的存储方式可以分为以下几种: 1. **顺序存储**:数据元素按照它们在内存中的物理顺序进行存储,如数组就是一种典型的顺序存储结构。这种方式简单直接,访问速度快,但插入和删除元素可能需要移动大量元素。 2. **链式存储**:每个数据元素包含一个指向下一个元素的指针或引用,如链表(单链表、双链表)和(如二叉搜索)。链式存储便于插入和删除,但随机访问速度较慢。 3. **散列存储**(哈希存储):使用哈希函数将数据元素的键转换为索引,存储在特定的位置。散列表提供了快速查找,但可能会有冲突,需要解决哈希冲突的方法。 4. **堆存储**:堆是一种特殊的数据结构,主要用于实现优先队列。最大堆(父节点大于子节点)和最小堆(父节点小于子节点)都有自己的存储和操作特点。 5. **图存储**:在图结构中,节点由边连接,通常采用邻接矩阵或邻接表的方式存储,前者用二维数组表示,后者为每条边存储起点和终点。 6. **压缩存储**:例如霍夫曼编码和B/B+等,用于高效地存储大量重复的数据,减少空间占用。 7. **动态数组和动态集合**:这些是动态调整大小的数据结构,如ArrayList和HashSet,适合不确定大小的序列和不重复元素的集合。 每种存储方式都有其适用的场景和优缺点,选择哪种取决于具体的应用需求和性能要求。如果你对某个数据结构的具体实现或者应用场景感兴趣,可以详细询问。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值