数据结构
-
栈结构: 先进后出(入口出口在同一侧类似弹夹,最先填装的最后发射出去)
-
队列: 先进先出 (入口出口分别在集合两侧,类似排队,先排队的先出去)
-
数组:
- 查询快: 数组的地址是连续的,通过数组地址可以找到数组,通过索引可以快速查询某个元素
- 增删慢:数组长度固定,要增删一个元素必须创建一个新数组,把源数组复制过来
-
链表: linked list 由一系列节点 node(链表中每个元素称为节点)组成,节点可以在运行时动态生成,每个节点包括两个部分: 一个是存储数据源的数据域,另一个是存储下一个节点地址的指针域,链表结构有单向链表与双向链表
- 查询慢: 链表中地址是不连续的,每次查询元素都必须从头开始
- 增删快: 链表结构增加/删除一个元素对链表的整体结构没有影响,所以快
- 单向链表: 链表中只有一条链子,不能保证元素的顺序(存储和取出元素的顺序可能不一致)
- 双向链表: 链表中有两条链子,有一条链子是专门记录元素顺序,是一个有序集合
-
树:
- 二叉树: binary tree 是每个节点不超过2的有序树
- 排序树/查找树: 在二叉树的基础上,元素是有大小顺序的,左子树小,右子树大, 查询快
- 平衡树: 左之树和右子树相等,不平衡树相反
- 红黑树: 特点趋近于平衡树,查询速度非常快,查询叶子节点最大次数和最小次数不超过2倍
- 节点可以是红色或黑色的
- 根节点是黑色的
- 叶子节点(空节点)是黑色的
- 每个红色的节点的子节点都是黑色的
- 任何一个节点到每一个叶子节点的所有路径上黑色节点数相同