阅读 62

JavaScript 数据结构 队列

队列简介

img

  • 先 “ 进” 先 “出”
  • 就像 食堂 排队打饭 先进先出 确保有序
  • JavaScript没有队列 同样 可以用Array来实现栈的所有功能

应用场景

1. JS异步中的任务队列

先来看一道经典的面试题

setTimeOut( () =>{console.log(1)} , 0);
console.log(2)
复制代码

问: 输出顺序

答案: 2 1

问什么呢? 我们就要来看事件循环与任务队列的知识

CFE2C4D363ACD240947553D4581E7296

  1. 主事件 进入任务队列
  2. 任务队列 中的事件依次进入 js引擎 执行代码
  3. 非异步任务直接执行 若为异步任务 js引擎直接抛给WebApi
  4. webApi将回调函数放入任务队列 如果 回调函数中仍具有异步任务 依次执行上一步

2. LeetCode 最近的请求次数 933. 最近的请求次数 - 力扣(LeetCode) (leetcode-cn.com)

image-20211011105503174

解题:
// q.push() 入队
// q.shift() 出队 
​
var RecentCounter = function() {
 this.q = [];
};
​
/** 
 * @param {number} t
 * @return {number}
 */
RecentCounter.prototype.ping = function(t) {
    this.q.push(t);
    while(this.q[0] < (t - 3000)){
        this.q.shift();
    }
    return this.q.length
​
};
​
/**
 * Your RecentCounter object will be instantiated and called as such:
 * var obj = new RecentCounter()
 * var param_1 = obj.ping(t)
 */
复制代码

总结

  • 常用操作 push 入队 shift 出队 queue[0] 队头
  • 先进先出
  • js引擎 利用队列 处理异步任务

参考文献

lewis 《JavaScript版数据结构与算法》 系列课程

文章分类
前端
文章标签