day23-数据结构之 树

一、树的概念

1.1 基本概念

        树:n(n>=0)个结点的有限集合

        n = 0 ,空树

        在任意一个非空树中,

  1. 有且仅有一个特定的根结点
  2. 当n>1 时,其余结点可分为m个互不相交的有限集合T1,T2,T3......Tm,其中每一个
    集合又是一个树,并且称谓子树。

        结点拥有子树的个数称谓结点的度:

  1. 度为0的结点称谓叶结点
  2. 度不为0,称谓分支结点

        树的度数是指,这棵树中,最大的结点的度数,称谓树的度数

        树的深度或高度,从根开始,根为第一层,根的孩子为第二层

1.2 树的存储结构

  1. 顺序结构
  2. 链式结构

1.3 二叉树

        n个结点的有限集合,集合要么为空树,要么由一个根结点和两棵互不相交,分别称谓根结点的左子树和右子树的二叉树组成

        特点:

  1. 每个结点最多两个子树。
  2. 左子树和右子树是有顺序的,次序不能颠倒。
  3. 如果某个结点只有一个子树,也要区分左,右子树。

        特殊的二叉树
        1,斜树,所有的结点都只有左子树,左斜树,所有结点都只有右子树,右树。
        2,满二叉树,所有的分支结点都存在左右子树,并且叶子都在同一层上。
        3,完全二叉树,对于一颗有n个结点的二叉树按层序编号,如果编号i(1<=i<=n)的结点于同样深度的满二叉树中编号为i的结点在二叉树中位置完全相同,则这可树为完全二叉树。

        特性
        1,在二叉树的第i层上最多有2^(i-1)个结点 i>=1
        2,深度为k的二叉树至多有2^k  -1 个结点 k>=1
        3,任意一个二叉树T,如果其叶子结点的个数是n0,度数为2的结点数为n2, n0 = n2 +1;
        4,有n个结点的完全二叉树深度为(logn/log 2) +1;

        层序,
前序,根左右,先访问根,然访问左,访问右。(越靠前,根层次越靠前)
中序,左根右,先从根开始(不是先访问根),从左开始访问,在访问根,在访问右结点。
后序,左右根,先从根开始(不是先访问根),先访问左,在访问右。在访问根。(越靠后,根层次越靠下)

二、 树的操作

2.1 创建树

2.2 前序遍历

 2.3 销毁树

三、哈希表

        哈希表(Hash Table)是一种基于哈希函数实现的数据结构,用于高效地存储和检索键值对。它通过将键映射到数组中的特定位置来实现快速访问,平均时间复杂度为 O(1)。

        基本原理:哈希表的核心是哈希函数,它将任意大小的数据映射到固定大小的值(通常是一个整数),这个值称为哈希值。哈希值用于确定键值对在数组中的存储位置。

        冲突的处理:由于哈希函数可能将不同的键映射到相同的哈希值,因此会发生哈希冲突。常见的冲突解决方法包括链地址法和开放地址法。

  • 链地址法:每个数组位置存储一个链表,所有哈希值相同的键值对都存储在这个链表中。
  • 开放地址法:当发生冲突时,通过探测方法(如线性探测、二次探测)寻找下一个可用的位置。

哈希表的优缺点

  • 优点:平均时间复杂度为 O(1),适合处理大量数据。
  • 缺点:哈希冲突可能导致性能下降,哈希函数的设计对性能影响较大。

四、内核链表

内核中链表是双向循环链表;

         内部增删改查已经写好,将需要的内容组合到结构体中即可使用

可通过www.kernel.org去下载内核

内核链表的思想:普通链表与数据耦合性高,自己定义结构体,将数据放入

  • offset:传入结构体,成员,通过宏进入,计算node的偏移量是多少
  • contrainof:返回该类型指针的地址

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值