Javascript数据结构与算法--队列(顺序队列、优先队列、循环队列)的实现与用法 (2)

循环队列的一个例子就是击鼓传花的游戏。在这个游戏中,孩子们围成一个圆圈,把花尽快的传递给旁边的人。某一时刻传花停止,这个时候花在谁手里,谁就退出圆圈结束游戏。重复这个过程,直到只剩一个孩子(胜者)。
另一个类似的案例是,约瑟夫环问题。

下面,我们以击鼓传花游戏来分析。

import Queue from "./queue-array"; export default class CircleQueue { constructor() {} hotPotato(nameList, num) { // 利用顺序队列创建的队列,来完成循环队列 let queue = new Queue() for (let i = 0; i < nameList.length; i++) { queue.enqueue(nameList[i]) } let eliminated = ''; while (queue.size() > 1) { // 此过程将队列变成循环队列 for (let i = 0; i < num; i++) { queue.enqueue(queue.dequeue()); } eliminated = queue.dequeue(); console.log(eliminated + '在击鼓传花游戏中被淘汰') } // 返回最后胜利者 return queue.dequeue() } }

以上所有的队列,都是在数组结构的基础上创建和应用的。
[完]

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wssxgz.html