队列(Queue)是一种运算受限的线性表,特点:先进先出。(FIFO:First In First Out)
受限之处:
- 只容许在表的前端(front)进行删除操作。
- 只容许在表的后端(rear)进行插入操作。
队列在程序中的利用
- 打印队列:计算机打印多个文件的时候,须要排队打印。
- 线程队列:当开启多线程时,当新开启的线程所需的资源有余时就先放入线程队列,期待 CPU 解决。
队列常见的操作
enqueue(element)
向队列尾部增加一个(或多个)新的项。dequeue()
移除队列的第一(即排在队列最后面的)项,并返回被移除的元素。front()
返回队列中的第一个元素——最先被增加,也将是最先被移除的元素。队列不做任何变动(不移除元素,只返回元素信息与 Map 类的 peek 办法十分相似)。isEmpty()
如果队列中不蕴含任何元素,返回 true,否则返回 false。size()
返回队列蕴含的元素个数,与数组的 length 属性相似。toString()
将队列中的内容,转成字符串模式。
代码实现
class Queue {constructor() {this.items = [];
}
enqueue(item) {this.items.push(item)
}
dequeue() {return this.items.shift()
}
front() {return this.items[0]
}
isEmpty() {return this.item.length === 0}
// size() 查看队列中元素的个数
size() {return this.items.length}
// toString() 将队列中的元素以字符串模式返回
toString() {
let result = ''
for (let item of this.items) {result += item + ' '}
return result
}
}
击鼓传花
剖析:传入一组数据汇合和设定的数字 number,循环遍历数组内元素,遍历到的元素为指定数字 number 时将该元素删除,直至数组剩下一个元素。
function queueGame(nameList, number) {const queue = new Queue();
for (const name of nameList) {queue.enqueue(name)
}
while (queue.size() > 1) {for (let i = 0; i < number - 1; i++) {queue.enqueue(queue.dequeue());
}
queue.dequeue();}
const endName = queue.front()
return nameList.indexOf(endName)
}