栈: 先进后出的结构
场景: JS的函数调用就是 栈的方式
试题: 力扣 20
常用方法: push、pop、 stack[stack.lenght-1]
队列: 先进先出的结构
场景: 食堂打饭、JS中的任务队列
试题: 力扣 933
常用方法: push、shift、 stack[0]
链表: 非连续、非顺序的存储结构
Note: 增删非首尾元素,不需要移动元素,只需要改动next指向
const a = { val: 'a'}
const b = { val: 'b'}
const c = { val: 'c'}
const d = { val: 'd'}
a.next = b ;
b.next = c;
c.next = d;
// 插入
const e = { val: 'e'};
c.next = e;
e.next = d;
试题: 力扣 237、206、2、83
常用方法: 修改next指向
集合: 一种无序且唯一的集合
场景: new Set()
试题: 力扣 933
树: 分层次数据嵌套模型
场景: Dom树、级联选择
深度遍历:尽可能深搜索树的分支,
const forEveryOne = (root) => {
console.log(root.val)
root.chil.forEach((item) => {
forEveryOne(item)
})
}
广度遍历: 先访问离根节点最近的节点
const bfs = (root) => {
const q = [root];
while (q.length > 0) {
const n = q.shift();
console.log(n.val);
n.chil.forEach(item => {
q.push(item)
});
}
}
试题: 力扣