这是我参与11月更文挑战的第4天,活动详情查看:2021最后一次更文挑战
1.队列简介:
1.1什么是队列?
- 一个先进先出的数据结构
JavaScript中没有队列的数据结构,但是可以用Array实现队列的所有功能
codePart:
const queue = [];
queue.push(1);
queue.push(2);
const queueTop = queue.shift();
const queueTop2 = queue.shift();
- 入队的方法:
push - 出队的方法:
shift删除队列的第一个元素,并将该删除的元素返回
2.队列的使用场景:
- 公交车🚌排队、JS异步中的任务队列、计算最近请求的次数。
2.1-任务队列的场景:
js是单线程的,无法同时处理异步中的并发任务- 使用
任务队列先后处理异步任务 - 下图中的gif图是细分了
宏任务队列和微任务队列
2.2-计算最近请求次数:
- 有新请求就入队,
3000ms前发出的请求出队。 - 队列的长度就是最近的请求次数。
2.3-LeeCode-933.最近请求次数
题目的话,点击下面链接:
codePart:
//题解
var RecentCounter = function(){
this.queue = [];
};
RencentCounter.prototype.ping = function(t){
this.queue.push(t);
while(this.q[0] < t - 3000){
this.q[0].shift();
};
return this.queue.length;
}
RecentCounter类中的this.queue是为了能够在原型方式中获取到- 根据题述,上述类的有个原型方法
ping(t),参数t是以毫秒为单位的某个时间 - 循环条件为
t时间到t-3000这个范围,如果队列的第一个元素时间比范围最小值还小,那么需要剔除队列 - 队列的长度即为最近3000毫秒内,请求的次数
3.队列总结:
- 后续涉及
树和图会用到队列的广度优先遍历。 - 队列常用操作:
- 入队:
push - 出队:
shift - 队列第一个元素:
queue[0]
- 入队: