常见数据结构
--

# 数组

## 数组的基本操作

- insert - 在指定索引位置插入一个元素
- get - 返回指定索引位置的元素
- delete - 删除指定索引位置的元素
- size - 得到数组所有元素的数量

## 关于数组的常见问题

- 寻找数组中第二小的元素
- 找到数组中第一个不重复出现的整数
- 合并两个有序数组
- 重新排列数组中的正值和负值

# 栈

## 栈的基本操作

- push — 在顶部插入一个元素
- pop — 返回并移除栈顶元素
- isEmpty — 如果栈为空，则返回true
- top — 返回顶部元素，但并不移除它

## 关于栈的常见问题

- 使用栈计算后缀表达式
- 对栈的元素进行排序
- 判断表达式是否括号平衡

# 队列

## 队列的基本操作

- enqueue() — 在队列尾部插入元素
- dequeue() — 移除队列头部的元素
- isEmpty() — 如果队列为空，则返回true
- top() — 返回队列的第一个元素

## 关于队列的常见问题

- 使用队列表示栈
- 对队列的前k个元素倒序
- 使用队列生成从1到n的二进制数

# 链表
  
## 链表的基本操作

- insertAtEnd - 在链表的末尾插入指定元素
- insertAtHead - 在链接列表的开头/头部插入指定元素
- delete - 从链接列表中删除指定元素
- deleteAtHead - 删除链接列表的第一个元素
- search - 从链表中返回指定元素
- isEmpty - 如果链表为空，则返回true  

双端链表可以作为栈、队列、双端队列来使用。

# 关于链表的常见问题

- 反转链表
- 检测链表中的循环
- 返回链表倒数第N个节点
- 删除链表中的重复项

# 图

## 关于图的常见问题

- 实现广度和深度优先搜索
- 检查图是否为树
- 计算图的边数
- 找到两个顶点之间的最短路径

# 树

## 关于树结构的常见问题

- 求二叉树的高度
- 在二叉搜索树中查找第k个最大值
- 查找与根节点距离k的节点
- 在二叉树中查找给定节点的祖先节点

## 关于字典树「Trie」的常见问题
   
- 计算字典树中的总单词数
- 打印存储在字典树中的所有单词
- 使用字典树对数组的元素进行排序
- 使用字典树从字典中形成单词
- 构建T9字典「字典树+ DFS 」

# 哈希表

## 关于哈希结构的常见问题
   
- 在数组中查找对称键值对
- 追踪遍历的完整路径
- 查找数组是否是另一个数组的子集
- 检查给定的数组是否不相交