队列(FIFO)规则:先进先出
击鼓传花游戏规则:
所有的人围成一个圈,规定一个数字,从第一个人的名字开始数,数到谁就淘汰谁,最后剩下的人获胜。
代码:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>封装队列</title>
</head>
<body>
<script>
//封装队列类
function Queue() {
//属性
this.items = [];
//方法
//1.将元素添加到队列中
Queue.prototype.enQueue = function (element) {
this.items.push(element);
}
//2.从队列中删除前端元素
Queue.prototype.deQueue = function () {
return this.items.shift();
}
//3.查看前端元素
Queue.prototype.front = function () {
return this.items[0];
}
//4.查看队列是否为空
Queue.prototype.isEmpty = function () {
return this.items.length == 0
}
//5.查看队列中元素的个数
Queue.prototype.size = function () {
return this.items.length
}
//6.toSting方法
Queue.prototype.toString = function () {
let str = ""
for (let i = 0; i < this.items.length; i++) {
str += this.items[i] + " "
}
return str
}
}
//击鼓传花
function passGame(nameList, number) {
let queue = new Queue();
//将所有的名字添加进队列
for (let i = 0; i < nameList.length; i++) {
queue.enQueue(nameList[i])
}
while (queue.size() > 1) {
// 将所有下标不是number-1的名字移到队列后面
for (let i = 0; i < number; i++) {
queue.enQueue(queue.deQueue())
}
// 删除队列第一个名字,即下标为number-1的名字
queue.deQueue()
}
// 获取最终剩下的人
return queue.front()
}
let nameList = ["张三", "李四", "王五", "小红", "小明"]
alert(passGame(nameList,5))
</script>
</body>
</html>
结果: