这次自考中考到了用邻接表表示二叉树的知识,但是自考书上说的非常少,甚至往年的自考题都没有出过!回来后就查了软考书,没想到还真让我找到了树的存储结构这么一个说法,虽然不叫邻接表,但是形状差不多差不多,所以就总结一下,用来扩充自己的知识!
说到数据结构的存储结构,我们经常想到的就是顺序存储和链式存储,我们很容发现这两种存储方法对栈和队列的存储非常方便,但是应用于树的话就很难反映结点之间的逻辑关系(比如哪个结点是哪个结点的父节点,兄弟结点等等),于是就产生了我们即将要学习的树的存储结构!
树的存储结构一共有三种方式:双亲表示法;孩子表示法;兄弟表示法。
先给出一个树:
由图可以看出每个结点的数据为ABCDEFG,我把每一个结点都赋予一个序列,对应分别为0123456.
双亲表示法:
该方法用一组地址连续的单元存储树的结点,并在每个结点中附设一个指示器,指出其双亲结点在该存储结构中的位置。
咱们用图和表格来说明:
那么根据上面树的结构,我们可以画出树的双亲表示法为:
结点序列 | 数据 | 双亲 |
0 | A | -1 |
1 | B | 0 |
2 | C | 0 |
3 | D | 0 |
4 | E | 1 |
5 | F | 3 |
6 | G | 3 |
孩子表示法:
该表示法在存储结构中用指针指示出结点的每个孩子,为每个结点的孩子建立一个链表。也就是令每个结点的所有孩子结点构成一个用单链表表示的线性表。
举例:还是用上面的那一颗树
孩子表示法为:
双亲孩子表示法:
我们还可以将双亲表示法和孩子表示法结合起来,如下图:
孩子兄弟表示法:
此法又称为二叉链表表示法,它在链表的结点中设置两个指针域分别指向该结点的第一个孩子和下一个兄弟。
表示为:
仍用开头的树作为例子,表示方法如下:
小总:
在没有总结这一部分之前,总是认为树既然属于数据结构,那么它肯定也有顺序存储和链式存储。但是总结后就发现他们之间还是有一点区别的!所以我们学习软考知识的时候要时时总结才会理解的更好!总结还会继续的!敬请期待吧!