- 栈
函数调用、历史操作
- 共享内存栈
能预估两栈大小的情况下,可以节省空间
- 逆波兰式
编译器一般把四则运算先解析成逆波兰式之后再进行运算
- 递归
请注意递归终结条件,以及多次递归情况下栈的空间消耗
- 共享内存栈
- 队列
- 循环队列
从任何一个节点开始,都可以遍历整个队列
- 循环队列
- 串
- KMP模式匹配算法
判断(精髓在判断的方式)给定字符串是否为主串的子串
- KMP模式匹配算法
- 树
- 二叉树性质
5种性质很重要
- 遍历二叉树
线性化的过程
- 线索二叉树
把线性化的过程记录下来,不用每次都遍历一边
- 赫夫曼树
权值越大的叶子越靠近根,带权路径越短
- 二叉树性质
- 图
- 图的存储和遍历
复杂数据类型的内存结构
- 最小生成树
最小权重生成树(n个节点,n-1条边),Prim算法、Kruskal算法
- 最短路径
最佳路径,权重可以是时间、消耗金钱、距离等,求权重最大(小)和
- 拓扑排序
其实就是对一个有向图(包含AOV网)构造拓扑序列的过程
- 关键途径
求工程中必不可少且耗时最多的流程(AOE网)
- 图的存储和遍历
-
有序表查找
都是O(lgN)的时间复杂度,总比一个个循环的快
- 折半查找
可以看作一个二叉排序树,深度与时间复杂度规模相同
- 插入查找
为什么非要折半,不能是折四分之一?记住那个公式!
- 斐波那契查找
黄金比例决定下标位置
- 折半查找
-
线性索引查找
索引也是一种数据结构
- 稠密索引
为数据一对一的建立索引,索引和数据的规模一样
- 分块索引
块间有序,快内无序
- 倒排索引
搜索引擎或数据库普通索引的基础原理
- 稠密索引
-
二叉排序树(BST)
左小右大,有可能退化成单链
-
平衡二叉树(AVL)
平衡因子,深度越大,时间复杂度越高,I/O开销越高
-
红黑树
5个规则,保证红黑分布,保证树的分布平衡,深度降低
-
多路查找树(B-tree、B+tree)
再平衡也解决不了数据量大的情况(树的深度还是会很大),如果一个节点可以存多条记录,并且能保证左小右大的规则
-
散列表查找
数据间没关系,通过哈希函数操作哈希表,注意哈希冲突
- 冒泡排序
平均O(n^2),最好O(n),最坏O(n^2),辅助空间O(1),稳定
- 简单选择排序
平均O(n^2),最好O(n^2),最坏O(n^2),辅助空间O(1),稳定
- 直接插入排序
平均O(n^2),最好O(n),最坏O(n^2),辅助空间O(1),稳定
- 希尔排序
平均O(nlgn)~O(n^2),最好O(n^1.3),最坏O(n^2),辅助空间O(1),不稳定
- 堆排序
平均O(nlgn),最好O(nlgn),最坏O(nlgn),辅助空间O(1),不稳定
- 归并排序
平均O(nlgn),最好O(nlgn),最坏O(nlgn),辅助空间O(n),稳定
- 快速排序
平均O(nlgn),最好O(nlgn),最坏O(n^2),辅助空间O(lgn)~O(n),不稳定