数据结构介绍

目录

数据结构

数据结构-树

二叉树

 二叉查找数

平衡二叉树

 平衡二叉树-旋转

平衡二叉树-左左,左右

平衡二叉树-右右,右左

红黑树

红黑规则

添加节点


数据结构

数据结构是计算机存储,组织数据的方式。是指相互之间存在一种或多种特定关系的数据元素的集合。通常情况下,精心选择的数据结构可以带来跟高的运行或者存储效率。

数据结构有:

栈:栈是一种数据先进后出的模型

队列:队列是一种数先进先出的模型

数组:数组是一种查询快,增删慢的模型

        查询数据通过地址值和索引定位,查询任意数据耗时相同,查询速度快

        删除数据时,要将原始数据删除,同时后面每个数据前移,删除效率低

        添加数据时,添加位置后的每个数据后移,再添加元素,添加效率极低

链表:链表是由一个一个节点组成的,一个节点是由数据和地址值组成的

 链表是一种增删快,查询慢的模型(对比数组)

查询数据必须从头(head)开始查询

链表分为:单向链表和双向链表

数据结构-树

二叉树

 二叉树是由一个一个节点组成的,一个节点又是由父节点地址值,自身地址值,左子节点,右子节点组成的。

度:每一个节点的子节点数量(0<度<2)

二叉树中任意一个节点的度要小于等于2;

 

 二叉查找数

        二叉查找树,又称二叉排序树或者二叉搜索树。

        特点:

                1,每一个节点上最多有两个子节点

                2,每一个节点的左子节点都小于自己

                3,每一个节点的右子节点都大于自己

        二叉查找树添节点

                规则:小的存左边,大的存右边,一样的不存

平衡二叉树

        二叉树左右两个子树的高度差不超过1

        任意节点的左右两个字数都是一颗平衡二叉树

 平衡二叉树-旋转

        左旋

        右旋

        触发时机:

                当添加一个节点之后,该树不再是一颗平衡二叉树

 

 注意点:

        判断添加元素与当前节点的关系

        成功添加之后,判断是否破坏了二叉树的平衡

 

平衡二叉树-左左,左右

        左左

                在根节点左子树的左子树有节点插入,导致二叉树不平衡

        解决办法:右旋

        左右:

                在根节点左子树的右子树有节点插入,导致二叉树不平衡

        解决办法:先将根节点的左子树左旋,再将跟节点右旋

平衡二叉树-右右,右左

        右右

                当根节点右子树的右子树有节点插入,导致二叉树不平衡    

        解决办法:左旋

右左:

                在根节点右子树的左子树有节点插入,导致二叉树不平衡

        解决办法:先将根节点的右子树右旋,再将跟节点左旋

红黑树

        红黑树是一种自平很的二叉查找树,是计算机科学中用到的一种数据结构。

红黑树是一种特殊的二叉查找树,红黑树的每一个节点上都有存储位表示节点的颜色,每一个节点可以是红或者黑;红黑树不是高度平衡的,它的平衡时通过红黑规则进行实现的。

红黑树是一个二叉查找树:

                但不是高度平衡的

                条件:自己的红黑规则

红黑规则

        1,每一个节点可以是红或者黑

        2,跟节点必须是黑

        3,如果一个节点没有子节点或则父节点,则该节点相应的指针属性值为Nil,这些Nil视为叶节点,每个叶节点(Nil)是黑色的

        4,如果某一个节点是红色,那么它的子节点必须是黑色(不能出现两个红色节点相连的情况)

        5,对每一个节点,从该节点到其所有后代叶节点的简单路径上,均包含相同数目的黑色节点。 

添加节点

        添加节点是默认为红色,效率高。

       跟节点位置:直接变为黑色

        非根节点位置:

                1,父节点为黑色:则不需要任何操作

                2,父节点为红色:

                                a:叔叔节点为红色:将“父节点”设置为黑色,将“叔叔节点”设为“黑色”

                                                                   将”祖父节点“设为”红色“

                                b:叔叔节点为黑色:将父节点设为黑色

                                                                   将祖父节点设为红色

                                                                   以祖父节点为支点进行旋转

                                                                    (如果是左(右)子节点的右(左)子节点有数据,可以先将左(右)子节点左(右)旋。)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值