队列结构

97 阅读1分钟

队列( TypeScript)

  • 只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表
  • 先进先出(First In First Out)

利用数组实现

class ArrayQueue<T> {
  // 使用数组维护内部队列数据
  private queue: T[] = []
  
  // 插入队头
  enqueue(element: T): void {
    this.queue.push(element)
  }
  // 删除队尾
  dequeue(): T | undefined {
    return this.queue.shift()
  }
  // 查看队头元素
  peek(): T | undefined {
    return this.queue[0]
  }
  isEmpty(): boolean {
    return this.queue.length === 0
  }
  size(): number {
    return this.queue.length
  }

}

击鼓传花案例

function hotPotato(names: string[], num: number) {
  const queue = new ArrayQueue<string>()
  
  // 存储到队列中
  for (const name of names) {
    queue.enqueue(name)
  }

  while(queue.size() > 1) {
    for (let i = 1; i < num; i++) {
      const name = queue.dequeue()!
      queue.enqueue(name)
    }
    queue.dequeue() // -> 出局者
  }
  
  return queue.dequeue()
}