
1、可以使用循环队列来模拟击鼓传花的游戏(约瑟夫环问题)。
2、一群孩子围成一圈,每次传递n个数,停下来时手里拿花的孩子被淘汰,直到队伍中只剩下一个孩子,即胜利者。
循环队列,每次循环的时候(从队列头部)弹出一个孩子,再把这个孩子加入到队列的尾部,循环 n 次,循环停止时弹出队列头部的孩子(被淘汰),直到队列中只剩下一个孩子。
实例
function Queue() {
//初始化队列(使用数组实现)
var items = [];
//入队
this.enqueue = function (ele) {
items.push(ele);
};
//出队
this.dequeue = function () {
return items.shift();
};
//返回首元素
this.front = function () {
return items[0];
};
//队列是否为空
this.isEmpty = function () {
return items.length == 0;
};
//清空队列
this.clear = function () {
items = [];
};
//返回队列长度
this.size = function () {
return items.length;
};
//查看列队
this.show = function () {
return items;
};
}
/**
*
* @param {名单} names
* @param {指定传递次数} num
*/
function onlyOne(names, num) {
var queue = new Queue();
//所有名单入队
names.forEach((name) => {
queue.enqueue(name);
});
//淘汰的人名
var loser = "";
//只要还有一个以上的人在,就一直持续
while (queue.size() > 1) {
for (let i = 0; i < num; i++) {
//把每次出队的人,再次入队 ,这样一共循环了num 次(击鼓传花一共传了num次)
queue.enqueue(queue.dequeue());
}
//到这就次数就用完了,下一个就要出队了
loser = queue.dequeue();
console.log(loser + "被淘汰了");
}
//到这就剩下一个人了
return queue.dequeue();
}
var names = ["文科", "张凡", "覃军", "邱秋", "黄景"];
var winner = onlyOne(names, 99);
console.log("金马奖影帝最终获得者是:" + winner);
以上就是js循环队列的使用,希望对大家有所帮助。更多js学习指路:js教程
本文转载于禅境花园,如有侵犯联系作者修改。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/3789/viewspace-2828139/ ,如需转载,请注明出处,否则将追究法律责任。