常用数据逻辑结构
集合——数据元素间除“同属于一个集合”外,无其它关系
线性结构——一个对一个,如线性表、栈、队列
树形结构——一个对多个,如树
图形结构——多个对多个,如图
树形结构特点:非线性结构,只有一个直接前驱,
但可能有多树形结构特点:非线性结构,只有一个直接前驱,
但可能有多个直接后继(1:n)个直接后继(1:n)
树型结构(非线性结构):结点之间一对多关系 、具有层次关系
树型结构是一类非常重要的非线性结构。直观地,树型结构是以分支关系定义的层次结构。
树的定义
树(tree)是由n(n≥0)个结点组成的有限集合T。n=0的树称为空树;对n>0的树,有:
(1)仅有一个特殊的结点称为根(root)结点,根结点没有前驱结点;
(2)当n>1时,除根结点外其余的结点分为m(m>0)个互不相交的有限集合T1,T2,…,Tm,其中每个集合Ti本身又是一棵树,称之为根的子树( subtree)。
注:树的定义具有递归性,即“树中还有树”;仅有一个根结点的树是最小树;
树的基本术语——从结构上分
结点(node):由数据元素和构造数据元素之间关系的指针组成
结点的度:结点所拥有的子树的个数
树的度:树中所有结点的度的最大值
叶结点:度为0的结点,也称作终端结点
分支结点:度不为0的结点,除叶结点之外的其余结点。
结点的层次:从根结点到树中某结点所经路径上的分支数
规定树中根结点的层次为1,其余结点的层次等于其双亲结点的层次加1。若某结点在第l(l≧1)层,则其子结点在第l+1层。
树的深度:树中所有结点的层次的最大值
森林:m(m≥0)棵树的集合
树的基本术语——从关系上分
从根结点开始,到达某结点p所经过的所有结点成为结点p的层次路径(有且只有一条)。
结点p的层次路径上的所有结点(p除外)称为p的祖先(ancester) 。
以某一结点为根的子树中的任意结点称为该结点的子孙结点(descent)。
孩子(child)结点:树中一个结点的子树的根结点
双亲(parent)结点:若树中某结点有孩子结点,则这个结点就称作它的孩子结点的双亲结点
兄弟(sibling)结点:具有相同的双亲结点的结点
树的基本术语——从结构上分
无序树:树中任意一个结点的各孩子结点之间的次序构成 无关紧要的树
有序树:树中任意一个结点的各孩子结点有严格排列次序的树
树的表示形式
⑴ 倒悬树。是最常用的表示形式。
⑵ 嵌套集合(文氏图)。是一些集合的集体,对于任何两个集合,或者不相交,或者一个集合包含另一个集合。
⑶ 广义表形式。
⑷ 凹入法表示形式(凹入表)。
树的表示方法的多样化说明了树结构的重要性。
树的存储结构
定长结点的多重链表结构
不定长结点的多重链表结构
不定长的结点存贮法不便于操作。
定长结点存贮法浪费空间。
假设树有n个结点,树的度为k,那么,共有nk个链域,使用了 n-1个链域,浪费的链域数为 (nk – n +1),浪费的比例= (nk – n +1 ) / nk 趋向于1
结论:度为2的树最节省存贮空间。