栈Stack
后进先出 ,数组模拟
常用操作: push、 pop、stack[stack.length-1]看栈顶


vscode里通过打断点+F5 可以操作,通过单步调试 单步跳出,在左侧可以直观的看到call stack的执行过程
练习:lc有效的括号 

队列 Queue
先进先出 , 数组模拟
常用操作: push、 shift 、 queue[0] 看队头
**
练习:lc993 最近请求次数

链表 LinkedList
使用Object模拟链表
链表是用next指,原型链是通过proto指,图里的的->就表示proto
面试题1: 手写instanceof: 遍历A的原型链 ,如果能找到B.prototype,就返回true

面试题2:
// value a ; undefined; value a; value b
链表与前端结合: 使用链表指针获取JSON的节点值
练习:lc237 lc206 lc2 lc83 lc141
集合Set
无序、唯一
常用操作: 去重、判断某元素是否在集合中、求交集

for of
Set里key 和value 是一样的
Set 变 Array const arr = […set] 、 const arr = Array.from(set)
Array 变 Set const set = new Set([1,2,3])
差集:加个!
练习:lc349
字典Map

练习 349 20 1 3 76
树 Tree


DFS 用递归 BFS 用队列

二叉树: js里通常用Object模拟二叉树
前中后序 遍历
1.递归版(太简单了)
2.非递归版(函数调用栈 ) ??
层序
前端与树:遍历JSON的所有节点值
渲染AntDeisgn的树组件?
练习 102 94 112 104 111
图graph


1.邻接矩阵
2.邻接表 : 数组形式 、链表形式
js 邻接表
DFS

// 2013
BFS

//2031 visited?
练习 65 417 133
堆 heap
完全二叉树 

用最小堆
同理 地K小 用最大堆
JS实现最小堆类
215 347 23
排序
排序 sort
搜索 indexOf 不存在返回-1
排序
搜索
21 374
分治
分 —>递归—>合


应用场景:归并、快排、二分搜索、翻转二叉树…..
练习 374 226 100 101
DP
与分治最大的区别就是:子问题是否独立。 如果重叠—DP 如果独立—分治
eg fibonacci vs 翻转二叉树

DP步骤: 定义子问题—反复执行
练习 :70 198
贪心


455
122
回溯


46 全排列
78 子集




