什么是队列

一个先进先出的数据结构,和栈很像

  1. const queue = [];
  2. queue.push(1)
  3. queue.push(2)
  4. const item1 = queue.shift()
  5. const item2 = queue.shift()

什么场景用队列

  • 所有先进先出的场景,如: 食堂排队打饭,JS异步中的任务队列,计算最近请求次数

计算最近请求次数

  1. var RecentCounter = function() {
  2. this.queue = []
  3. };
  4. /**
  5. * @param {number} t
  6. * @return {number}
  7. */
  8. RecentCounter.prototype.ping = function(t) {
  9. // 入队
  10. this.queue.push(t)
  11. // 把不符合条件的全部出栈
  12. while(this.queue[0] < t - 3000) {
  13. this.queue.shift()
  14. }
  15. return this.queue.length
  16. };
  • 时间复杂度: O(n)
  • 空间复杂度: O(n)

JS异步中的任务队列

队列 - 图1

  1. // 2, 1
  2. setTimeout(()=>{
  3. console.log(1)
  4. },0)
  5. console.log(2)