作业:整理自己的数据结构和脑图
  数据结构
 - 排序
  - 非受线性结构
- 顺序结构
- 数组
- 支持 O(1)的随机访问
  - 平均为 O(n)的插入和删除
  - 警惕越界错误,导致 Stack Over Flow
 
 
  - 链式结构
- 单链表
- 不支持随机访问,需要遍历去访问节点
  - 插入和删除只需要移动指针,时间复杂度为 O(1)
  - 每个节点需要额外的存储指针,需要的内存比数据大
 
  - 双链表
- 再单链表的基础上,除头节点外,每个节点多了一个存放前驱节点内存地址的指针
 
  - 循环链表
  - 静态链表
 
 
  - 受限线性表
- 栈
  - 堆
  - 队列
- 普通队列
顺序和链表都可以实现,先进先出  - 双边队列
入口和出口都可以进队和出队  - 优先级队列
根据优先级来出队  - 实际应用
LRU Cache 
 
  - 树与二叉树
- 特点
- 顺序和链式都可以实现
  - 遍历方式
- 广度优先搜索
  - 深度优先搜索
- 前序遍历
  - 中序遍历
  - 后续遍历
  - 不使用递归的方式完成
 
 
 
  - 二叉树
  - 完全二叉树
  - 满二叉树
  - 二叉搜索树
  - 平衡二叉树
 
 
  算法
 - 复杂度
- 时间复杂度
- O(1)常数复杂度,最佳,比如 Hash 表,缓存等
  - O(log n)仅次与常数复杂度,如二分查找、二叉搜索树等
  - O(n)线性复杂度,如大多数遍历操作
  - O(n^2)双重 for 循环
  - O(2^n)递归的时间复杂度
 
  - 空间复杂度
 
  - 数组
  - 链表
  - 栈
  - 队列
  - 映射
  - 集合
  - 并查集
  - 树
  - 递归,分治
- 盗梦空间
  - 终止空间
  - 本层处理
  - Drill Down
  - 本层状态清理
 
  - 二分查找
  - 贪心算法
  - 动态规划
- 简单版本是递归加缓存
  - 高版本是地推公式
  - 状态的定义
  - 最优子结构
  - 状态转移方程
 
  - 位运算
  - 布隆过滤器
- 判断不存在 100% 准确
  - 判断存在误差
  - 利用 Hash 函数将待判断 Key 对应的多个位上
 
  - LRU
- HashTable + 双向链表
  - get 和 set 都是 O(1)的复杂度