数据结构之树(三)——树的存储结构(三种)

双亲表示法

  • 实现: 定义结构数组存放树的结点,每个结点含两个域:

    • 数据域:存放结点本身信息。
    • 双亲域:指示本结点的双亲结点在数组中的位置。
  • 例子
    在这里插入图片描述
    上图所示树的双亲表示法的数组下标为:
    在这里插入图片描述

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

  • 类型定义

typedef struct PTNode  //结点结构
{
	TElemType data;
	int parent;        //双亲位置域
}PTNode;
#define MAX_TREE_SIZE 100
typedef struct                   //树结构
{
	PTNode nodes[MAX_TREE_SIZE];
	int r, n;                    //根结点的位置和结点个数
}PTree;


孩子链表

  • 实现: 把每个结点的孩子结点排列起来,看成是一个线性表,用单链表存储,则n个结点有n个孩子链表(叶子的孩子链表为空表)。而n个头指针又组成一个线性表,用顺序表(含n个元素的结构数组)存储。

  • 例子
    在这里插入图片描述

  • 类型定义

1.孩子结点结构
在这里插入图片描述

typedef struct CTNode
{
	int child;
	struct CTNode *next;
}*ChildPtr;

2.双亲结点结构
在这里插入图片描述

typedef struct
{
	TElemType data;
	ChildPtr firstchild;     //孩子链表的头指针
}CTBox;

3.树结构

typedef struct
{
	CTBox nodes[MAX_TREE_SIZE];
	int n, r;     //结点数和根结点的位置
};
  • 特点 :找孩子容易,找双亲难。

  • 为了解决找双亲难得问题,可以在双亲结点里增设一个指针域,存放双亲结点的下标——带双亲的孩子链表
    在这里插入图片描述



孩子兄弟表示法(二叉树表示法,二叉链表表示法)

  • 实现: 用二叉链表作树的存储结构,链表中每个结点的两个指针域分别指向其第一个孩子结点下一个兄弟结点

  • 类型定义:

typedef struct CSNode
{
	ElemType daya;
	struct CSNode *firstchild, *nextsibling;
}CSNode,*CSTree;
  • 例子:
    在这里插入图片描述
  • 特点: 找孩子容易,找孩子的兄弟容易,找双亲难。
  • 可以给每个结点增设一个指针域,从而解决找双亲难的问题。
  • 2
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
数据结构是计算机科学中研究数据组织、存储和管理方式的一门学科。它关注如何高效地组织和使用数据,以及设计和实现相关的算法。数据结构是计算机程序的基础,它能够影响程序的性能和效率。 C语言是一种功能强大的编程语言,广泛应用于系统级编程和嵌入式系统开发。由于其底层语言特性和灵活的语法,C语言非常适合于处理和操作数据结构。 C语言提供了针对数据结构的一些基本概念和操作方式。例如,可以使用结构体来定义自定义的数据类型,结构体可以包含多个不同类型的变量。这种方式可以用来表示和组织复杂的数据结构,比如链表、等。 此外,C语言还提供了一些对数据结构进行操作的函数和库。例如,可以使用指针来操作链表和数据结构,通过指针的灵活性,能够高效地进行数据的插入、删除和查找等操作。 在程序设计中,数据结构的选择和设计是非常重要的。不同的数据结构适用于不同的场景和问题。在使用C语言进行程序设计时,我们需要根据实际需求选择合适的数据结构,并合理设计和实现相应的算法,以提高程序的性能和效率。 总结而言,数据结构与程序设计是密切相关的。C语言提供了丰富的功能和灵活的语法,使得我们能够方便地处理和操作各种数据结构。通过合理的数据结构选择和算法设计,我们能够编写出高效、可靠的程序。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值