常用数据结构
- 线性结构:
- 字符串、数组(固定vs动态,有序 vs无序)、链表(单向链表、双向链表);
- 栈、队列(普通队列、优先队列)、双端队列、块状数组(链表+数组);(注意,栈,队列或用数组或用链表实现)
- 哈希表(数组或者链表实现)、关联容器(字典或者映射,主要还是哈希)、并查集、集合(散乱无序,交并差等操作)
- 树形结构:
- 堆(大顶堆、小顶堆(数组+树))
- 字典查找树(trie树)、二叉树(平衡vs不平衡、完全vs不完全)、二叉排序树、二叉查找树、红黑树、B+/B-树、哈夫曼树
其他:倒排索引、邻接表、邻接矩阵、位图(位操作)、最小生成树
常见算法
- 排序算法:归并排序、快速排序、基数(桶)排序、堆排序,这四种最为重要,其次冒泡、选择、插入、希尔排序次之;
- 图算法:深度优先搜索(dfs)、广度优先搜索(bfs)、最短路径、最小生成树、拓扑排序等等。
- 字符串算法:字符串查找与匹配、正则表达式等
- 算法基础思想:枚举,递归,分治,贪心,动态规划,剪枝,回溯(剪枝和回溯主要用于图搜索方面)
- 数学方面:素数(最大公约数、最小公倍数)、排列、组合
未完待续。。。