队列简介
什么是队列
- 一个先进先出的数据结构
![队列](https://img-blog.csdnimg.cn/20200727205752291.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM0ODI5NDQ3,size_16,color_FFFFFF,t_70)
- JavaScript中没有队列,但可以用Array实现队列的所有功能
const queue = [];
queue.push(1);
queue.push(2);
const item1 = queue.shift();
const item2 = queue.shift();
什么场景使用队列
队列的应用场景
- 需要先进先出的场景
- 比如:食堂排队打饭、JS异步中的任务队列、计算最近请求次数
场景1:食堂排队打饭
- 食堂只留一个窗口,学生排队打饭
- 先进先出可以保证有序性
场景2:JS异步中的任务队列
![JS异步中的队列任务](https://img-blog.csdnimg.cn/20200727210635951.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM0ODI5NDQ3,size_16,color_FFFFFF,t_70)
- JS是单线程的,无法同时处理异步中的并发任务
- 使用任务队列先后处理异步任务
- 实例代码
setTimeout(()=> console.log(1), 0)
console.log(2)
场景3:计算最近请求次数
- 问题:输入一个数组,代表每个请求发起的时刻,输出每个时刻下最近的请求次数(当前时间计算,3000毫秒内的请求次数)
- 输入:inputs = [[], [1], [100], [3001], [3002]]
- 输出:[null, 1, 2, 3, 3]
- 实现思路:有新请求就入队,3000ms前发出的请求出队,队列的长度就是最近的请求次数
章节总结
- 队列是一个先进先出的数据结构
- JavaScript没有队列,但可以用Array实现队列的所有功能
- 队列常用操作:push / shift / queue[0]