介绍:
    数据用什么样的方式组合在一起
    常见的数据结构
    栈、队列、数组、链表、红黑树

    栈:
    stack,又称堆栈,它是运算受限的线性表,其限制是仅允许在标的一端进行插入和删除操作,不允许在其他任何位置进行添加、查找、删除等操作
    简单来说:
    采用该结构的集合,对元素的存取有如下的特点
    先进后出(即:存进去的元素,要在他后面的元素依次取出后,才能取出该元素)。例如:
    子弹压进弹夹,先进的在下面,后压进的在上面
    栈的让人口、出口都是栈 的顶端位置
    image.png压栈:
    就是存元素,即,把元素存储到栈的顶端位置。栈中已有元素依次向栈底方向移动一个位置
    弹栈:
    就是取元素,即,把栈的顶端位置元素取出,栈中已有元素依次向栈顶方向移动一个位置

    队列:
    简称队,它同堆栈一样,也是一种运算受限的线性表,其限制是仅允许在表的一端进行插入,而在表的另一端进行删除
    简单来说:
    采用该结构的集合,对元素的存取有如下的特点
    先进先出(即:存进去的元素,要在他前面的元素依次取出后,才能取出该元素)例如:火车过山洞,车头先进去,车尾后进去,车头先出,车尾后出
    队列的入口,出口各占一侧

    数组:
    数组Array,是有序的元素序列,数组是在内存中开辟一端连续的空间,并在此空间存放元素,就像是一排出租屋,有100个房间,从001到100 每个房间都有固定编号,通过编号就可以快速找到租房子的人
    简单来说,采用该结构的集合,对元素的存取有如下的特点
    查找元素快,通过索引,可以快速访问指定位置的元素
    image.png
    增删元素慢
    **
    指定索引位置增加元素:
    需要创建一个新数组,将指定新元素存储在指定索引位置,再把原数组元素根据索引,赋值到新数组对应索引的位置
    image.png
    指定索引位置删除元素:
    需要创建一个新数组,把原数组元素根据索引,赋值到新数组对应索引的位置,原数组指定索引位置元素不复制到新数组中
    image.png

    链表:
    链表:linked list由一系列节点node(链表中每一个元素称为节点)组成,节点可以在运行时动态生成,每个节点包含两个部分,一个是存储数据元素的数据域,另一个是存储下一个节点地址的指针域。我们常说的链表结构有单向链表和双向链表
    image.png
    单向链表:
    简单来说,采用该结构的集合,对元素的存取有如下的特点:
    多个结点之间,通过地址进行连接,例如,多个人手拉手,每个人使用自己的右手蜡烛下一个人的左手,依次类推,这样多个人就连在一起了

    查找元素慢:
    想查找某个元素需要通过连接的结点,依次向后查找指定元素
    增删元素快:
    image.png
    树数据结构
    树是有很多节点组成的

    树基本结构介绍:
    树具有的特点
    1.每一个节点有零个或者多个子节点
    2.没有父节点的节点称为根节点,一个树最多有一个根节点
    3.每一个非根节点有且只有一个父节点
    image.png
    二叉树:
    如果树中的每个节点的子节点的个数不超过2,那么该数就是一个二叉树
    image.png
    二叉查找数/二叉排序树
    二叉查找树的特点:
    1.左子树上所有的节点的值均小于等于他的根节点的值
    2.右子树上所有的节点指均大于或者等于他的根节点的值
    3.每一个子节点最多有两个子树
    image.png

    增删改查的性能都很高
    遍历获取元素的时候可以按照“左中右”的顺序进行遍历
    注意:二叉查找树存在的问题:会出现“瘸子”的现象,影响查找效率
    image.png

    平衡二叉树:
    基于查找二叉树,但是让树不要太高,尽量元素均衡
    为了避免出现“瘸子”的现象。减少树的高度,提高我们的搜索效率,又存在一种树的结构:“平衡二叉树”
    规则:它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一颗平衡二叉树

    image.png
    旋转:
    在构建一颗平衡二叉树的过程中,当有新的节点要插入时,检查是否因插入后而破坏了数的平衡,如果是,则需要做旋转去改变数的结构

    左旋:
    左旋就是将节点的右支往左拉,右节点变成父节点,并把晋升之后多余的左子节点让给降级节点的右子节点
    image.png
    右旋:
    将节点的左支往右拉,左子节点变成腹肌诶单,并把晋升之后多余的右子节点让给降级节点的左子节点
    image.png
    image.png左左:
    左左即为在原来平衡的二叉树上,在节点的左子树的左子树下,有新节点插入,导致节点的左右子树的高度差为2,如下即为“10”节点的左子树“7” 的左子树“4”插入了接地那“5”或“3”导致失衡

    image.pngimage.png

    image.png
    image.pngimage.pngimage.png

    红黑树:
    就是平衡的二叉查找树:
    **
    概述:
    红黑树是一种自平衡的二叉查找树,数计算机科学中用到的一种数据结构

    红黑树不是高度平衡的,它的平衡是通过“红黑树的特性”进行实现的

    红黑树的特性:
    1.每一个节点或是红色的,或是黑色的
    2.根节点必须是黑色的
    3.每个叶节点(Nil)是黑色的;(如果一个节点没有子节点或者父节点,则该节点相应的指针属性值为Nil,这些Nil视为叶节点)
    4.如果某一个节点是红色,那么它的子节点必须是黑色(不能出现两个红色节点相连的情况)
    5.对每一个节点,从该节点到其所有后代叶节点的简单路径上,均包含相同数目的黑色节点
    image.png
    在进行元素插入的时候,和之前一样,每一次插入完毕以后,使用黑色规则进行校验,如果不满足红黑规则,就需要通过变色,左旋和右旋来调整数,使其满足红黑规则