循环队列的一个例子就是击鼓传花游戏(Hot
Potato)。在这个游戏中,孩子们围成一个圆圈,把花尽快地传递给旁边的人。某一时刻传花停止,
这个时候花在谁手里,谁就退出圆圈结束游戏。重复这个过程,直到只剩一个孩子(胜者)。
份名单,把里面的名字全都加入队列。给定一个数字,然后迭代队列。从队列开头移
除一项,再将其添加到队列末尾,模拟击鼓传花(如果你把花传给了旁边的人,你被
淘汰的威胁立刻就解除了)。一旦传递次数达到给定的数字,拿着花的那个人就被淘汰了(从队

![]()
Potato)。在这个游戏中,孩子们围成一个圆圈,把花尽快地传递给旁边的人。某一时刻传花停止,
这个时候花在谁手里,谁就退出圆圈结束游戏。重复这个过程,直到只剩一个孩子(胜者)。
在下面这个示例中,我们要实现一个模拟的击鼓传花游戏:
function Queue(){
var items = [];
this.enqueue = function(element){
items.push(element);
};
this.dequeue = function(){
return items.shift();
};
this.front = function(){
return items[0];
};
this.isEmpty = function(){
return items.length ==0;
};
this.size = function(){
return items.length;
};
this.print = function(){
console.log(items.toString());
};
}
function hotPotato(nameList,num){
var queue = new Queue();
for(var i=0; i<nameList.length;i++){
queue.enqueue(nameList[i]);
}
var eliminated = '';
while (queue.size()>1){
for(var i=0;i<num;i++){
queue.enqueue(queue.dequeue());
}
eliminated = queue.dequeue();
console.log(eliminated + '在击鼓传花游戏中被淘汰');
}
return queue.dequeue();
}
var names = ['John','Jack','Camila','Ingrid','Carl'];
var winner = hotPotato(names,7);
console.log('胜利者:'+winner);
实现一个模拟的击鼓传花游戏,要用到这一章开头实现的Queue类。我们会得到一份名单,把里面的名字全都加入队列。给定一个数字,然后迭代队列。从队列开头移
除一项,再将其添加到队列末尾,模拟击鼓传花(如果你把花传给了旁边的人,你被
淘汰的威胁立刻就解除了)。一旦传递次数达到给定的数字,拿着花的那个人就被淘汰了(从队
列中移除——)。最后只剩下一个人的时候,这个人就是胜者
以上算法的输出如下:
Camila在击鼓传花游戏中被淘汰。
Jack在击鼓传花游戏中被淘汰。
Carl在击鼓传花游戏中被淘汰。
Ingrid在击鼓传花游戏中被淘汰。
胜利者: John
下图模拟了这个输出过程: