JavaScript队列结构——击鼓传花游戏

JavaScript队列结构——击鼓传花游戏

//队列类
function Queue(){
	this.items = []
	//将元素添加到队列中
	Queue.prototype.enqueue = function(item){
		this.items.push(item)
	}
	//从队列中删除前端元素
	Queue.prototype.dequeue = function(){
		return this.items.shift()
	}
	//查看前端元素(不改变原队列)
	Queue.prototype.front = function(){
		return this.items[0]
	}
	//查看队列是否为空
	Queue.prototype.isEmpty = function(){
		return this.items.length == 0
	}
	//查看队列中元素个数
	Queue.prototype.size = function(){
		return this.items.length
	}
	//toString方法
	Queue.prototype.toString = function(){
		return this.items.join(' ')
	}
}

/* 
击鼓传花游戏,玩家按顺序从1开始数数,数到指定的num时出局
剩下的玩家接着重新从1开始数数
最后剩下的玩家获胜
*/
function passGame(players , num){
	//创建队列对象
	const queue = new Queue()
	//将所有玩家添加进队列
	players.forEach(item => {
		queue.enqueue(item)
	})
	//判断剩余玩家数量,剩余数量为1时结束游戏
	//最后剩下的玩家为获胜者
	while(queue.items.length > 1){
		//下标从0开始,每轮循环num-1次
		//已经数过数并且数的数不是num的玩家,从队列首端移到尾端
		for (let i = 0; i < num - 1; i++){
			queue.enqueue(queue.dequeue())
		}
		//循环结束后,淘汰数到num的玩家
		queue.dequeue()
	}
	//返回结果
	const winner = queue.front()
	console.log('获胜者为:' + winner)
	return winner
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值