森林和树的储存方法C++

概念:

森林是m棵互不相交的树的集合

树储存方法:

1双亲表示法

实现:定义结构数组储存树的结点,结点有数据域和双亲域,双亲域储存双亲结点在数组中的位置

特点:找双亲容易,找孩子难

代码展示:

typedef struct PTNode/*定义结点*/
{
    int data;
    int parent;
}PTNode;
typedef struct
{
    PTNode node[MAXSIZE];
    int r, n;/*根结点位置和结点个数*/
}PTree;
2孩子链表法(顺序表加链表表示)

实现:把每个结点储存在一个数组中,每个结点的孩子结点位置以链表形式接在该结点之后

图像展现:

特点:找孩子容易,找双亲难

代码展示:

typedef struct CTNode/*孩子结点结构*/
{
    int child;
    struct CTNode* next;
}ChildPtr;
typedef struct/*双亲结点结构*/
{
    int data;
    ChildPtr firstchild;
}CTBox;
typedef struct
{
    int r, n;
    CTBox nodes[MAXSIZE];
}CTree;
3孩子兄弟表示法

实现:利用二叉链表,每个结点的两个指针域分别指向其第一个孩子结点和下一个兄弟结点

图像展现:

特点:空间效率较低,找双亲难

代码展示:

typedef struct CSNode
{
    int data;
    struct CSNode* firstchild, * nextboy;
}CSNode,*CSTree;

总结:

森林简单来说就是树的集合。树的储存方法多种多样,应根据利用数据的频繁程度来选择合适的储存方式,如访问结点孩子较频繁,且数据量大的系统,使用孩子链表法比另外两种方法更好;访问结点双亲较频繁,且数据量大的系统,使用双亲表示法比另外两种方法更好;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值