<!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>Document</title>
</head>
<body></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.toString()f的方法
Queue.prototype.toString = function() {
var resultString = '';
for (var i = 0; i < this.items.length; i++) {
resultString += this.items + ' ';
}
return resultString;
}
}
var queue = new Queue();
queue.enqueue('abc');
queue.enqueue('bcss');
queue.enqueue('bcss');
queue.enqueue('bcss');
alert(queue.items)
console.log(queue.items);
queue.dequeue()
console.log(queue);
console.log(queue.isEmpty());
console.log(queue.size());
console.log(queue.items);
//击鼓传花算法实现
function passGame(nameList, num) {
//创建队列结构
var queue = new Queue()
//将所有人依次加入队列之中
for (var i = 0; i < nameList.length; i++) {
queue.enqueue(nameList[i])
}
while (queue.size() > 1) {
//开始数数
// 若不是则加入队尾,若是则淘汰删除
// 3.1 num之之前的人重新放入到队尾
for (var i = 0; i < num - 1; i++) {
queue.enqueue(queue.dequeue())
}
queue.dequeue();
//3.2num对应的这个人,直接删除
}
console.log(queue.size());
var endName = queue.front();
console.log("剩下的人:" + endName);
return nameList.indexOf(endName);
}
// 测试
names = ['dsds', 'ds', 'fr', 'ded', 'dd']
console.log(passGame(names, 3))
</script>
</html>