樹的存储方法.docxVIP

  1. 1、本文档共5页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
樹的存储方法

树的存储方法1.双亲链表表示法??双亲链表表示法利用树中每个结点的双亲唯一性,在存储结点信息的同时,为每个结点附设一个指向其双亲的指针parent,惟一地表示任何-棵树。(1)双亲链表表示法的实现?方法① 用动态链表实现?方法② 用向量表示——更为方便(2)双亲链表向量表示的形式说明? #define MaxTreeSize 100 //向量空间的大小,由用户定义? typedef char DataType; //应由用户定义? typedef struc{????? DataType data;//结点数据????? int parent; //双亲指针,指示结点的双亲在向量中的位置??? }PTreeNode;? typedef struct{?????? PTreeNode nodes[MaxTreeSize];????? int n; //结点总数???? }PTree;? PTree T; //T是双亲链表 *注意:若T.nodes[i].parent=j,则T.nodes[i]的双亲是T.nodes[j]。(3)双亲链表表示实例? 【例】图6.17(a)的双亲链表表示如下面数组所示。?分析:E和F所在结点的双亲域是1,它们的双亲结点在向量中的位置是1,即B是它们的双亲。??注意:① 根无双亲,其parent域为-1。???② 双亲链表表示法中指针parent向上链接,适合求指定结点的双亲或祖先(包括根);求指定结点的孩子或其它后代时,可能要遍历整个数组。2.孩子链表表示法?(1)结点结构①定长节点:即树中每个结点均按树的度k来设置指针。???n个结点的树一共有n*k个指针域,而树中只有n-1条边,故树中的空指针数目为:kn-(n-1)=n(k-1)+1(k越大,浪费的空间越多)。②不定长结点:即树中每个结点按本结点的度来设置指针数,并在结点中增设一个度数域degree指出该结点包含的指针数。*注意:各结点不等长,虽然节省了空间,但是给运算带来不便。(2)孩子链表表示法??孩子链表表示法是为树中每个结点设置一个孩子链表,并将这些结点及相应的孩子链表的头指针存放在一个向量中。①孩子链表表示法的类型说明??? //以下的DataType和MaxTreeSize由用户定义??? typedef struct CNode//子链表结点{?????int child; //孩子结点在向量中对应的序号????struct CNode *next;?? }CNode;??? typedef struct{?????? DataType data; //存放树中结点数据????? CNode *firstchild;//孩子链表的头指针?? }PTNode;??? typedef struct{?????PTNode nodes[MaxTreeSize];??????int n,root; //n为结点总数,root指出根在向量中的位置???}CTree;??? Ctree T; //T为孩子链表表示??*注意:当结点T.nodes[i]为叶子时,其孩子链表为空,即 T.nodes[i].firstchild=NULL。②孩子链表表示法实例?【例】图6.17(a)所示树的孩子链表表示T如下面(a)图所示。图16.7树转化为二叉树(a)中树的孩子链表表示法?注意: ① 孩子结点的数据域仅存放了它们在向量空间的序号。???  ② 与双亲链表表示法相反,孩子链表表示便于实现涉及孩子及其子孙的运算,但不便于实现与双亲有关的运算。???  ③ 将双亲链表表示法和孩子链表表示法结合起来,可形成双亲孩子链表表示法。?  【例】上面的(b)图就是用双亲链表表示法来存储图6.17(a)中的树。3.孩子兄弟链表表示法(1)表示方法在存储结点信息的同时,附加两个分别指向该结点最左孩子和右邻兄弟的指针域leftmostchild和rightsibling,即可得树的孩子兄弟链表表示。(2)表示实例 【例】图6.17(a)中树的孩子兄弟链表如下图所示。??? 注意:这种存储结构的最大优点是:它和二叉树的二叉链表表示完全一样。可利用二叉树的算法来实现对树的操作。

文档评论(0)

df9v4fzI + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档