学习日记(数据结构简介)
- 数据结构是计算机底层存储、组织数据的方式,是指数据相互之间是以什么方式排列在一起的。
- 通常情况下,精心选择的数据结构可以带来更高的运行或存储效率。
- 常见的数据结构有:栈、队列、数组、链表、二叉树、二叉查找树、平衡二叉树、红黑树等等。
1. 栈
执行特点:后进先出,先进后出。
2. 队列
执行特点:先进先出,后进后出
3. 数组
特点:
- 查询速度快:通过索引查询速度快,查询任意数据耗时相同。
- 删除效率低:将原始数据删除,同时后面每个数据前移。
- 添加效率极低:先将添加位置后的每个数据后移,再添加元素。
4. 链表
特点:
-
链表中的元素是在内存中不连续存储的(游离存储),每个元素结点包含数据值和下一个元素的地址。
-
链表查询慢,无论查询哪个数据都要从头开始找。
-
链表增删相对快,但是也需要先查询到,再增删。
链表分为单向链表和双向链表,其中双向链表增删首尾元素的速度最快。
5. 二叉树
名词:
- 根节点:只能有一个根节点,每个节点最多支持两个直接子节点。
- 节点的度:节点拥有的子树的个数,二叉树的度不大于 2,叶子节点度为 0 的节点也成为终端节点。
- 高度:叶子节点的高度为 1,叶子节点的父节点高度为 2,以此类推,根节点的高度最高。
- 层:根节点在第一层,以此类推。
- 兄弟节点:拥有共同父节点的节点互称为兄弟节点。
6. 二叉查找树
二叉查找树又称为二叉排序树或二叉搜索树。
特点:
- 每一个节点上最多有两个子节点。
- 左子树上所有的节点的值都小于根节点的值。
- 右子树上所有的节点的值都大于根节点的值。
- 目的:提高检索数据的性能。
存在的问题:可能出现瘸子现象,导致查询的性能与单链表一样,查询速度变慢,如把 7,8,9,10,11 存入二叉查找树如图所示。
7. 二叉平衡树(平衡依据:左右子树高度差 ≤ 1)
平衡二叉树是在满足查找二叉树的大小规则下,让树尽可能矮小,以此提高数据的性能。
-
平衡二叉树要求:任意节点的左右两个子树的高度差不超过 1,任意节点的左右两个子树都是一颗平衡二叉树。
-
将查找二叉树变为平衡二叉树的策略:左旋或者右旋保证平衡。
8. 红黑树(平衡依据:红黑规则)
- 红黑树是一种自平衡的二叉查找树,是计算机科学中的一种数据结构。
- 1972 年出现时称为平衡二叉 B 数。1978 年被修改为红黑树。
- 每一个节点可以是红或黑,红黑树不是通过高度平衡的,它的平衡是通过”红黑规则“进行实现的,目的:提高效率,减小运算步骤,增加数据增删改查的性能。
- 红黑树增删改查的性能都很好。
红黑规则:
- 每一个节点初始可以是红色或者黑色的(默认用红色效率高),根节点必须是黑色。
- 如果一个节点没有子节点或者父节点,则该节点相应的指针属性为 Nil,这些 Nil 视为叶节点,叶节点是黑色的。
- 如果某一个节点是红色,那么它的子节点必须是黑色(不能出现两个红色节点相连的情况)。
- 对每一个节点,从该节点到其所有后代叶节点的简单路径上,均包含相同数目的黑色节点。
举例:将 20,18,23,22,16,24,19,15,14 形成红黑树。