队列,与栈类似,只是队列遵循的是 先进先出(FIFO) 原则的有序的项。也就是先来后到。
现实生活中最典型的就是 排队 这个例子,先排先处理。

队列的实现
class Queue {constructor() {this.count = 0;this.lowestCount = 0;this.items = {};}/*** 向队尾添加新的项* @param {*} element*/enqueue(element) {this.items[this.count] = element;this.count++;}/*** 移除队列第一项*/dequeue() {if (this.isEmpty()) {return;}let element = this.items[this.lowestCount];delete this.items[this.lowestCount];this.lowestCount++;return element;}/*** 返回队列第一项*/peek() {return this.isEmpty() ? null : this.items[this.lowestCount];}isEmpty() {return this.size() === 0;}size() {return this.count - this.lowestCount;}clear() {this.count = 0;this.lowestCount = 0;this.items = {};}toString() {if (this.isEmpty()) {return '';}let str = this.items[this.lowestCount].toString();for (let i = this.lowestCount + 1; i < this.count; i++) {str += `,${this.items[i]}`;}return str;}}
队列的应用
击鼓传花
function hotPotato(list, num) {let queue = new Queue();let dies = [];for (let i = 0; i < list.length; i++) {queue.enqueue(list[i]);}while (queue.size() > 1) {for (let i = 0; i < num; i++) {queue.enqueue(queue.dequeue());}dies.push(queue.dequeue());}return {dies,winner: queue.peek()}}const names = ['John', 'Jack', 'Camila', 'Ingrid', 'Carl'];const result = hotPotato(names, 5);result.dies.forEach(name => {console.log(`${name}在击鼓传花游戏中被淘汰。`);});console.log(`胜利者: ${result.winner}`);/*John在击鼓传花游戏中被淘汰。Camila在击鼓传花游戏中被淘汰。Jack在击鼓传花游戏中被淘汰。Carl在击鼓传花游戏中被淘汰。胜利者: Ingrid*/
