循环队列-击鼓传花

循环队列的一个例子就是击鼓传花游戏(Hot
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
下图模拟了这个输出过程:



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值