队列(Queue)——只用 push 和 shift 完成增删的“数组”

199 阅读1分钟

队列是只能用push和shift完成增删的数组,是一种先进先出的数据结构。

queue.png

也可以得到两个特征:

  1. 只允许从尾部添加元素。
  2. 只允许从头部移除元素

和栈对比下来就是,一般出栈时我们关注的是栈顶的元素arr[arr.length-1],而队列移除元素时,我们关注的是队列的第一位arr[0], 对应的javascript中就是,push去完成添加元素,shift去移除元素。

const queue = []  
queue.push('取餐员1')
queue.push('取餐员2')
queue.push('取餐员3')  
  
while(queue.length) {
    // 单纯访问队头元素(不出队)
    const top = queue[0]
    console.log(top,'取餐')
    // 将队头元素出队
    queue.shift()
}

// 队空
queue // []

//依次输出:
//取餐员1
//取餐员2
//取餐员3

应用场景:

定时发布内容,按顺序执行事件,...

类:

class Queue<T> {
  queue: T[]
  constructor() {
    this.queue = []
  }
  /**
   * 入队 
   */
  enqueue(item: T) {
    return this.queue.push(item)
  }

  /**
   * 出队 
   */
  dequeue() {
    return this.queue.shift()
  }

  /**
   * 队列长度 
   */
  size() {
    return this.queue.length
  }

  /**
   * 是否为空 
   */
  isEmpty() {
    return !!this.queue.length
  }

  /**
   * 队列开头元素 
   */
  start() {
    return this.queue[0]
  }

  /**
   * 队列结尾元素 
   */
  end() {
    return this.queue[this.queue.length - 1]
  }

}