队列简介
- 先 “ 进” 先 “出”
- 就像 食堂 排队打饭 先进先出 确保有序
JavaScript没有队列 同样 可以用Array来实现栈的所有功能
应用场景
1. JS异步中的任务队列
先来看一道经典的面试题
setTimeOut( () =>{console.log(1)} , 0);
console.log(2)
问: 输出顺序
答案: 2 1
问什么呢? 我们就要来看事件循环与任务队列的知识
- 主事件 进入任务队列
- 任务队列 中的事件依次进入 js引擎 执行代码
- 非异步任务直接执行 若为异步任务 js引擎直接抛给
WebApi webApi将回调函数放入任务队列 如果 回调函数中仍具有异步任务 依次执行上一步
2. LeetCode 最近的请求次数 933. 最近的请求次数 - 力扣(LeetCode) (leetcode-cn.com)
解题:
// 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版数据结构与算法》 系列课程