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
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章