目录
数据结构
数据结构是计算机存储,组织数据的方式。是指相互之间存在一种或多种特定关系的数据元素的集合。通常情况下,精心选择的数据结构可以带来跟高的运行或者存储效率。
数据结构有:
栈:栈是一种数据先进后出的模型
队列:队列是一种数先进先出的模型
数组:数组是一种查询快,增删慢的模型
查询数据通过地址值和索引定位,查询任意数据耗时相同,查询速度快
删除数据时,要将原始数据删除,同时后面每个数据前移,删除效率低
添加数据时,添加位置后的每个数据后移,再添加元素,添加效率极低
链表:链表是由一个一个节点组成的,一个节点是由数据和地址值组成的
链表是一种增删快,查询慢的模型(对比数组)
查询数据必须从头(head)开始查询
链表分为:单向链表和双向链表
数据结构-树
二叉树
二叉树是由一个一个节点组成的,一个节点又是由父节点地址值,自身地址值,左子节点,右子节点组成的。
度:每一个节点的子节点数量(0<度<2)
二叉树中任意一个节点的度要小于等于2;
二叉查找数
二叉查找树,又称二叉排序树或者二叉搜索树。
特点:
1,每一个节点上最多有两个子节点
2,每一个节点的左子节点都小于自己
3,每一个节点的右子节点都大于自己
二叉查找树添节点
规则:小的存左边,大的存右边,一样的不存
平衡二叉树
二叉树左右两个子树的高度差不超过1
任意节点的左右两个字数都是一颗平衡二叉树
平衡二叉树-旋转
左旋
右旋
触发时机:
当添加一个节点之后,该树不再是一颗平衡二叉树
注意点:
判断添加元素与当前节点的关系
成功添加之后,判断是否破坏了二叉树的平衡
平衡二叉树-左左,左右
左左
在根节点左子树的左子树有节点插入,导致二叉树不平衡
解决办法:右旋
左右:
在根节点左子树的右子树有节点插入,导致二叉树不平衡
解决办法:先将根节点的左子树左旋,再将跟节点右旋
平衡二叉树-右右,右左
右右
当根节点右子树的右子树有节点插入,导致二叉树不平衡
解决办法:左旋
右左:
在根节点右子树的左子树有节点插入,导致二叉树不平衡
解决办法:先将根节点的右子树右旋,再将跟节点左旋
红黑树
红黑树是一种自平很的二叉查找树,是计算机科学中用到的一种数据结构。
红黑树是一种特殊的二叉查找树,红黑树的每一个节点上都有存储位表示节点的颜色,每一个节点可以是红或者黑;红黑树不是高度平衡的,它的平衡时通过红黑规则进行实现的。
红黑树是一个二叉查找树:
但不是高度平衡的
条件:自己的红黑规则
红黑规则
1,每一个节点可以是红或者黑
2,跟节点必须是黑
3,如果一个节点没有子节点或则父节点,则该节点相应的指针属性值为Nil,这些Nil视为叶节点,每个叶节点(Nil)是黑色的
4,如果某一个节点是红色,那么它的子节点必须是黑色(不能出现两个红色节点相连的情况)
5,对每一个节点,从该节点到其所有后代叶节点的简单路径上,均包含相同数目的黑色节点。
添加节点
添加节点是默认为红色,效率高。
跟节点位置:直接变为黑色
非根节点位置:
1,父节点为黑色:则不需要任何操作
2,父节点为红色:
a:叔叔节点为红色:将“父节点”设置为黑色,将“叔叔节点”设为“黑色”
将”祖父节点“设为”红色“
b:叔叔节点为黑色:将父节点设为黑色
将祖父节点设为红色
以祖父节点为支点进行旋转
(如果是左(右)子节点的右(左)子节点有数据,可以先将左(右)子节点左(右)旋。)