(算法)栈、队列、链表、集合、字典、树、图、堆

203 阅读1分钟

栈: 先进后出的结构

场景: 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)
        });
    }
}

试题: 力扣