算法基础入门-数据结构-队列

371 阅读2分钟

这是我参与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.最近请求次数

题目的话,点击下面链接:

leetcode-cn.com/problems/nu…

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]