数据结构与算法3(树型结构)

树形结构:

1、树的基本概念

​  一种表示层次关系(一对多)的数据结构

  有且仅有一个特定的节点,该节点没有前驱,被称为根节点。

  剩余的n个互不相交的子集组成,其中的每一个子集也都是一棵树,被称为根节点的子树

  注意:树型结构具有递归性(树中有树)

2、树的表示方法:倒悬树、嵌套法、凹凸法

3、树的专业术语(不同资料略有不同)

  节点:组成树的基础元素,同时它也可以是一棵树

  节点的度:该节点子树的数量

  树的度:树中的节点的数量

  节点的层次:根节点层次为1,它的孩子层次为2,孩子的孩子层次为3,以此类推

  树的深度:树的最大层次数

  叶子节点:节点的度为0的节点

  双亲和孩子:节点的子树都称为孩子节点,该节点就是它们的双亲节点

  兄弟:具有同一个双亲节点,被称为兄弟节点

  祖先:从根节点出发到该节点,中间经过的所有节点都称为它的祖先

  子孙:一个节点的子树中的任意一个节点都成为它的子孙

  堂兄弟:双亲在同一层节点,称为堂兄弟节点

  森林:n个互不相交的树的集合称为森林

4、树的存储

  树可以顺序存储、链式存储,还可以混合存储,由于存储的信息不同,有以下三种常见表示方式:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4HuXmMog-1629198727394)(G:\学习日志\指针培训\2数据结构与算法\例1.png)]

双亲表示法 顺序

      位置		data		双亲的位置
      0				A				-1
      1				B				0
      2				C				0
      3				D				1
      4				E				1
      5				F				2
      6				G				3
      7				H				4
      8				I				4

  优点:方便找到双亲

  缺点:不方便找孩子

孩子表示法

  顺序:浪费空间

      位置		data		sub_arr(存储孩子的数据)
      0				A				1,2
      1				B				3,4
      2				C				5
      3				D				6
      4				E				7,8
      5				F
      6				G
      7				H
      8				I

  链式+顺序:节约空间

      位置		data		ListHead
      0				A				1->2->N
      1				B				3->4->N
      2				C				5->N
      3				D				6->N
      4				E				7->8->N
      5				F
      6				G
      7				H
      8				I

  优点:找孩子方便

  缺点:找双亲不方便

兄弟表示法

  双亲只存储第一个孩子节点,然后链式指向所有的兄弟节点

  优点:可以方便查询到所有的兄弟节点

  缺点:查询双亲比较麻烦

总结:普通树不常用,一般会转换成二叉树使用

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
你好!C语言中的数据结构与算法是编写高效和可维护代码的关键。C语言提供了一些基本的数据结构,如数组和结构体,并且允许用户自定义更复杂的数据结构。在算法方面,C语言提供了各种处理和操作数据的功能。 以下是一些常见的数据结构和算法的示例: 1. 数组:C语言中的数组是一种线性数据结构,可以存储相同类型的多个元素。数组可以通过索引来访问和修改其中的元素。 2. 链表:链表是一种动态数据结构,由一系列节点组成,每个节点包含数据和指向下一个节点的指针。链表可以用于实现栈、队列等数据结构。 3. 栈和队列:栈和队列都是线性数据结构,具有不同的插入和删除操作顺序。栈采用先进后出(LIFO)的原则,而队列采用先进先出(FIFO)的原则。 4. C语言中可以使用指针和结构体来实现二叉、二叉搜索、堆等树型数据结构在搜索、排序等方面有广泛应用。 5. 图:图由节点和边组成,用于表示不同元素之间的关系。图可以使用邻接矩阵或邻接表来表示。 在算法方面,C语言提供了各种排序算法(如冒泡排序、插入排序、快速排序等),查找算法(如线性查找、二分查找等)和图算法(如最短路径算法、最小生成算法等)的实现。 这只是数据结构与算法的一个简单介绍,如果你对特定的数据结构或算法有更深入的问题,可以继续提问!

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值