1. 数组:
1.1. 操作:
- Insert——在给定索引位置插入一个元素
- Get——返回给定索引位置的元素
- Delete——删除给定索引位置的元素
- Size——获取数组内所有元素的总数
1.2. 常问问题:
- 找到数组中第二小的元素
- 找到数组中第一个没有重复的整数
- 合并两个分类数组
- 重新排列数组中的正值和负值
2. 堆栈:
2.1. 操作:
- Push——在顶部插入元素
- Pop—— 从堆栈中删除后返回顶部元素
- isEmpty——如果堆栈为空,则返回 true
- Top ——返回顶部元素,但不从堆栈中删除
2.2. 常问问题:
- 使用堆栈计算后缀表达式
- 对堆栈中的值进行排序
- 检查表达式中的括号是否平衡
3. 队列:
3.1. 操作:
- Enqueue() —— 向队列末尾插入元素
- Dequeue() —— 从队列头部移除元素
- isEmpty() —— 如果队列为空,则返回 true
- Top() —— 返回队列的第一个元素
3.2. 常问问题:
- 使用队列来实现堆栈
- 颠倒队列中前 k 个元素的顺序
- 使用队列生成从 1 到 n 的二进制数
4. 链表:
4.1. 类型:
- 单链表(单向)
- 双链表(双向)
4.2. 操作:
- InsertAtEnd —— 在链表末尾插入指定元素
- InsertAtHead —— 在链表头部插入指定元素
- Delete —— 从链表中删除指定元素
- DeleteAtHead —— 删除链表的第一个元素
- Search —— 返回链表中的指定元素
- isEmpty —— 如果链表为空,返回 true
4.3. 常问问题:
- 翻转列表
- 检测链表中的循环
- 返回链表中倒数第 n 个节点
- 移除链表中的重复值
5. 树:
5.1. 类型:
N 叉树
平衡树
二叉树
二叉搜索树
平衡二叉树
红黑树
2-3 树
5.2. 常问问题:
- 找到一个二叉树的高度
- 找到一个二叉搜索树中第 k 个最大值
- 找到距离根部“k”个距离的节点
- 找到一个二叉树中给定节点的祖先(ancestors)
6. 图:
6.1. 分类:
- 无向图,有向图
- 邻接矩阵,邻接列表
- 常用算法:
- 广度优先搜索
- 深度优先搜索
6.2. 常问问题:
- 实现广度优先搜索和深度优先搜索
- 检查一个图是否为树
- 计算一张图中的边的数量
- 找到两个顶点之间的最短路径
7. 字典树(Tries,这是一种高效的树,有必要单独列出来):也叫“前缀树”
7.1. 常问问题:
- 计算字典树中的总字数
- 打印存储在字典树中的所有单词
- 使用字典树对数组的元素进行排序
- 使用字典树从字典中形成单词
- 构建一个T9字典
8. 哈希表:
8.1. 常问问题:
- 找到数组中的对称对
- 追踪遍历的完整路径
- 查看一个数组是否为另一个数组的子集
- 检查给定数组是否不相交