前端面试-算法1:栈、队列、链表

242 阅读1分钟

一个先进后出的数据结构 JS中没有栈,用Array实现栈的功能 进栈: push 出栈:pop 栈的应用场景:

  1. 十进制转二进制
  2. 判断字符串的括号是否有效

习题:

队列

一个先进后出的数据结构 同样JS中没有队列,用Array实现队列 进队: push 出队:shift 应用场景

  1. JS异步中的任务队列
  2. 计算最近请求 习题: LeetCode:933. 最近的请求次数

链表

多个元素组成的列表 元素存储不连续,用next指针连在一起

E56FD664-5C81-42BF-A280-336ED351BE8A.png

数组VS链表

  • 数组: 增删非首元素时往往需要移动元素
  • 链表: 增删非首元素,不需要移动元素,只需要更改next的指向即可 JS中的链表
const a = {val : 'a'}
const b = {val : 'b'}
const c = {val : 'c'}
a.next = b;
b.next = c;
c.next = d;

链表的遍历

let p = a;
while (a) {
    p = p.next;
}

链表插入

const e = {val : 'e'};
c.next = e;
e.next = d;

链表的删除

c.next = c.next.next