队列(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)}