参考
常见数据结构和 Javascript 实现总结
树的高度和深度以及结点的高度和深度
队列
1 | let Queue = function () { |
栈 Stack
1 | // 常见的 3 个操作:push pop top |
链表
1 | // 链表实现 |
其他数据结构
1 | /* |
集合 Set
Set 中的元素 不重复、无序
常见方法
- values: 返回集合中的所有元素
- size: 返回集合中元素的个数
- has: 判断集合中是否存在某个元素
- add: 向集合中添加元素
- remove: 从集合中移除某个元素
- union: 返回两个集合的并集
- intersection: 返回两个集合的交集
- difference: 返回两个集合的差集
- subset: 判断一个集合是否为另一个集合的子集
1 | function MySet() { |
哈希表 Hash Table
Hash Table 内部使用一个 hash 函数将传入的键转换成一串数字,而这串数字将作为键值对实际的 key
常见方法
- add: 增加一组键值对
- remove: 删除一组键值对
- lookup: 查找一个键对应的值
1 | function hash(string, max) { |
树
相关概念
- Leaf(叶节点):没有子节点的节点
- Edge(边):两个节点之间的连接线
- Path(路径):从源节点到目标节点的连续边
- Degree of Node(节点的度):表示拥有的子节点的个数
- Height of Tree(树的高度):也即深度,即树的最大层数(根节点层数从 1 开始,从 0 需减 1 层)
- Height of Node(节点的高度):该节点树内的叶节点的最大层数。叶节点高度为 1,往上节点的高度递增。一个节点的高度取最大值
- Depth of Node(节点的深度):从根节点到该节点的层数
层数一般从1开始
树节点的高度
二叉查找树
每个节点最多只有两个子节点
左侧子节点 < 当前节点
右侧子节点 > 当前节点
常用方法
- add:向树中插入一个节点
- findMin:查找树中最小的节点
- findMax:查找树中最大的节点
- find:查找树中的某个节点
- isPresent:判断某个节点在树中是否存在
- remove:移除树中的某个节点
1 | class Node { |
字典树 Trie
Trie 也可以叫做 Prefix Tree(前缀树),也是一种搜索树。
Trie分步骤存储数据,树中的每个节点代表一个步骤,trie 常用于
存储单词以便快速查找,比如实现单词的自动完成功能。
Trie 中的每个节点都包含一个单词的字母,跟着树的分支可以可以拼写出
一个完整的单词,每个节点还包含一个布尔值表示该节点是否是单词的最后一个字母
常用方法
- add:向字典树中增加一个单词
- isWord:判断字典树中是否包含某个单词
- print:返回字典树中的所有单词
1 | /** |
图 Graph
分 有向图 和 无向图
js 中常用矩阵表示
连接:节点 A 箭头朝外指向其他节点 B,称 A 连接 B
广度优先搜索算法
1 | function bfs(graph, root) { |