树的存储结构 - 数据结构和算法41
2013-03-23 04:57
323 查看
树的存储结构
让编程改变世界Change the world by program
树的存储结构
不好意思哈,这节课又需要大家搞脑子了。对于知识,你理解的越多,需要记住的就越少!上节课我们简单的介绍了树结构的强大,这节课我们来关心一下如何在内存中安排树这种结构的存放。
说到存储结构,就会想到我们前面章节讲过的顺序存储和链式存储两种基本结构。
对于线性表来说,很直观就可以理解,但对于树这种一对多的结构,我们应该怎么办呢?
要存储树,简单的顺序存储结构和链式存储结构是不能滴!不过如果充分利用它们各自的特点,完全可以间接地来实现。
大家先思考下,如果你是总工程师,让你来设计和规划,你有多少种方法可以实现对树结构的存放?
当然你要考虑到双亲、孩子、兄弟之间的关系。
小甲鱼这里要介绍三种不同的表示法:双亲表示法、孩子表示法、孩子兄弟表示法。
双亲表示法
双亲表示法,言外之意就是以双亲作为索引的关键词的一种存储方式。我们假设以一组连续空间存储树的结点,同时在每个结点中,附设一个指示其双亲结点在数组中位置的元素。
也就是说,每个结点除了知道自己是谁之外,还知道它的粑粑妈妈在哪里。
那么我们可以做如下定义:parent.c
![](http://blog.fishc.com/wp-content/uploads/2013/03/图片11.jpg)
这样的存储结构,我们可以根据某结点的parent指针找到它的双亲结点,所用的时间复杂度是O(1),索引到parent的值为-1时,表示找到了树结点的根。
可是,如果我们要知道某结点的孩子是什么?那么不好意思,请遍历整个树结构。
这真是麻烦,能不能改进一下呢?
鱼油们怎么看?
电视机前的小盆友们怎么看?
当然可以,我们只需要稍微改变一下结构即可:
![](http://blog.fishc.com/wp-content/uploads/2013/03/23.jpg)
那现在我们又比较关心它们兄弟之间的关系呢?
![](http://blog.fishc.com/wp-content/uploads/2013/03/33.jpg)
存储结构的设计是一个非常灵活的过程,只要你愿意,你可以设计出任何你想要的奇葩!
一个存储结构设计得是否合理,取决于基于该存储结构的运算是否适合、是否方便,时间复杂度好不好等等。
不要拘泥于你所学过的有限的数据类型,要把思维放开些,放开些,放开些!
当你的思维放开了,世界就变小了!
当你的思维放开了,知识就变少了!
[buy] 获得所有教学视频、课件、源代码等资源打包 [/buy]
[Downlink href='http://kuai.xunlei.com/d/BdsUA0YA.bxMUQQA6ee']视频下载[/Downlink]
[Downlink href='http://urlxf.qq.com/?2URbqiU']备胎下载[/Downlink]
相关文章推荐
- 树的存储结构 - 数据结构和算法41
- 2015-12-7 项目1—数据结构之自建算法库——图及其存储结构(邻接矩阵、邻接表)
- 树的存储结构2 – 数据结构和算法42
- 数据结构和算法笔记 lesson4 线性表链式存储结构 单链表
- 二叉树的存储结构 – 数据结构和算法45
- 【数据结构】以邻接矩阵作存储结构,求连通分量的个数,设计算法求图G的深度,深度优先序列输出
- 数据结构例程——图的邻接矩阵存储结构及算法
- 二叉树的存储结构 - 数据结构和算法45
- 【第十一周】数据结构之自建算法库——图及其存储结构(邻接矩阵、邻接表)
- 二叉树的存储结构 - 数据结构和算法45
- 图的存储结构(邻接表)- 数据结构和算法57
- 树的存储结构2 - 数据结构和算法42
- 算法与数据结构(四) 图的物理存储结构与深搜、广搜(Swift版)
- 图的存储结构(邻接表)- 数据结构和算法57
- 数据结构之自建算法库——图及其存储结构
- 树的存储结构2 - 数据结构和算法42
- 图的存储结构(邻接矩阵)- 数据结构和算法56
- 要完整准确的 均以单链表作存储结构 试编写算法将A表和B表归并成一个按元素值递减有序的线性表C 【数据结构】假设有两个按元素值递增有序的线性表A和B 并要求利用原表的空间存放C。谁会么
- 【数据结构】算法7.1-7.2 图的存储结构-数组表示法
- 图的存储结构(邻接矩阵)- 数据结构和算法56