@TOC
队列是什么?
一个先进先出的数据结构
JavaScript中没有队列,但可以用Array实现队列的所有功能
const queue = [];
queue.push(1);
queue.push(2);
const item1 = queue.shift();
const item2 = queue.shift();
队列的应用场景
需要先进先出的场景 比如:食堂排队打饭、JS异步中的任务队列、计算最近请求次数
场景一:食堂排队打饭
食堂只留一个窗口,学生排队打饭似春运
先进先出,保证有序
场景二:JS异步中的任务队列
JS是单线程,无法同时处理异步中的并发任务
使用任务队列先后处理异步任务
场景三:计算最近请求次数
有新请求就入队,3000ms前发出的请求出队 队列的长度就是最近请求次数 输入:inputs = [[],[1],[100],[3001],[3002]],输出:[null,1,2,3,3],分别在1,100,3001,3002时刻发出请求,这四个时刻的最近请求次数分别为1,2,3,3
LeetCode:933.最近的请求次数
解题思路
越早发出的请求越早不在最近3000ms内的请求里
满足先进先出,考虑用队列
解题步骤
有新请求就入队,3000ms前发出的请求出队
队列的长度就是最近请求次数
时间复杂度和空间复杂度都为O(n),时间复杂度n是需要被踢出队的请求次数,空间复杂度,对应长度,最近请求次数
前端与队列:JS异步中的任务队列
setTimeout(()=>console.log(1),0);
console.log(2)
技术要点
队列是一个先进先出的数据结构 JavaScript中没有队列,但可以用Array实现队列的所有功能 队列常用操作:push、shift、queue[0]
思考题
1、请用 ES6 的 class,封装一个 Queue 类,包括 push、shift、peek 方法。 2、请用队列这个数据结构结合 React 或 Vue写一个任务 App,包括添加任务和完成任务功能,要求任务只能先进先出