目录
- 数据结构
- 1. 堆栈
- 2. 队列
- 3. 数组
- 4. 链表
- a. 单向链表
- b. 双向链表
- 5. 树结构
- a. 二叉树
- b. 二叉查找树
- c. 平衡二叉树
- i. 非平衡二叉树转二叉树
- d. 红黑树
- i. 红黑树的特性
- ii. 红黑树的平衡
数据结构
- 数据结构指数据用什么样的方式组合在一起;
- 常见数据结构有:栈、队列、数组、链表和红黑树;
1. 堆栈
- 又称栈(stack),是运算受限的线性表,其限制是仅允许在标的一端进行插入和删除操作,不允许在其他任何位置进行添加、查找、删除等操作;
- 栈的入口、出口的都是栈的顶端位置;
- 后进先出(或先进后出)原则;
- 压栈:就是存元素;
- 弹栈:就是取元素;
2. 队列
- 又称队(queue),同堆栈一样,也是一种运算受限的线性表,其限制是仅允许在表的一端进行插入,而在表的另一端进行取出并删除;
- 先进先出(或后进后出)原则;
- 队列的入口、出口各占一侧;
3. 数组
- 数组(Array),是有序的元素序列,数组是在内存中开辟一段连续的空间,并在此空间存放元素;
- 查找元素快:通过索引,可以快速访问指定位置的元素;
- 增删元素慢,指定索引位置增加或删除元素,需要创建一个新数组;
4. 链表
- 链表(linked list),由一系列结点 node(链表中每一个元素称为结点)组成,结点可以在运行时动态生成,每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域;
- 链表结构有单向链表与双向链表;
- 多个结点之间,通过地址进行连接;
- 查找元素慢:想查找某个元素,需要通过连接的节点,依次向后查找指定元素;
- 增删元素快;
a. 单向链表
b. 双向链表
5. 树结构
- 每一个节点有零个或者多个子节点;
- 没有父节点的节点称之为根节点,一个树最多有一个根节点;
- 每一个非根节点有且只有一个父节点;
名词 | 说明 |
节点 | 指树中的一个元素 |
节点的度 | 节点拥有的子树的个数,二叉树的度不大于2 |
叶子节点 | 度为0的节点,也称之为终端结点 |
高度 | 叶子结点的高度为1,叶子结点的父节点高度为2,以此类推,根节点的高度最高 |
层 | 根节点在第一层,以此类推 |
父节点 | 若一个节点含有子节点,则这个节点称之为其子节点的父节点 |
子节点 | 子节点是父节点的下一层节点 |
兄弟节点 | 拥有共同父节点的节点互称为兄弟节点 |
a. 二叉树
- 如果树中的每个节点的子节点的个数不超过2,那么该树就是一个二叉树;
b. 二叉查找树
- Binary Search Tree (BST);
- 左子树上所有的节点的值均小于等于他的根节点的值;
- 右子树上所有的节点值均大于或者等于他的根节点的值;
- 每一个子节点最多有两个子树;
- 遍历获取元素的时候可以按照"左中右"的顺序进行遍历;
- 案例演示(20,18,23,22,17,24,19)数据的存储过程:
- 二叉查找树存在问题,会出现"瘸子"的现象,影响查询效率:
c. 平衡二叉树
- Balanced Binary Tree (BBT);
- 为了避免出现"瘸子"的现象,减少树的高度,提高我们的搜素效率,又存在一种树的结构:平衡二叉树;
- 规则:它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树;
- 平衡二叉树与非平衡二叉树:
i. 非平衡二叉树转二叉树
- 详见:Java 平衡二叉树的旋转;
d. 红黑树
- Red -Black Tree (RBT);
- 红黑树是一种自平衡的二叉查找树,是计算机科学中用到的一种数据结构,它是在1972年由 Rudolf Bayer 发明的,当时被称之为平衡二叉B树,后来,在1978年被 Leoj.Guibas 和 Robert Sedgewick 修改为如今的"红黑树";
- 红黑树查询效率非常高,但是对应地,创建非常耗时;
- 红黑树是一种特殊的二叉查找树,红黑树的每一个节点上都有存储位表示节点的颜色,可以是红或者黑;
- 红黑树不是高度平衡的,它的平衡是通过"红黑树的特性"进行实现的;
i. 红黑树的特性
- 每 一个节点或是红色的,或者是黑色的;
- 根节点必须是黑色;
- 每个叶节点(Nil)是黑色的(如果一个节点没有子节点或者父节点,则该节点相应的指针属性值为 Nil,这些 Nil 视为叶节点);
- 如果某一个节点是红色,那么它的子节点必须是黑色(不能出现两个红色节点相连的情况);
- 对每一个节点,从该节点到其所有后代叶节点的简单路径上,均包含相同数目的黑色节点;
ii. 红黑树的平衡
- 在进行元素插入的时候,和之前一样,每一次插入完毕以后,使用黑色规则进行校验,如果不满足红黑规则,就需要通过变色,左旋和右旋来调整树,使其满足红黑规则;