// 封装队列
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
Queue.prototype.toString = function () {
var resultString = '';
for (var i = 0; i < this.items.length; i++) {
resultString += this.items[i] + " ";
}
return resultString;
}
};
// 使用队列
var queue = new Queue();
// 面试题:击鼓传花
// 参数:玩家名单,淘汰的数字
function passGame(nameList, num) {
// 1. 创建一个队列结构
var queue = new Queue();
// 2. 将所有人都依次加入到队列中
for (var i = 0; i < nameList.length; i++) {
queue.enqueue(nameList[i]);
};
// 3. 开始数数字
// 不是num的时候,重新加入队列的末尾
// 是num这个数字的时候,将其从队列中删除
while (queue.size() > 1) {
// 3.1 num数字之前的人重新放入到队列末尾
for (var i = 0; i < num - 1; i++) {
queue.enqueue(queue.dequeue());
};
// 3.2 num对应这个人,直接从队列删除
queue.dequeue();
};
// 4. 获取剩下的那个人
alert(queue.size());
var endName = queue.front();
alert("最终剩下的人:" + endName);
return nameList.indexOf(endName);
}
// 测试击鼓传花
names = ['诸葛大力', '张伟', '胡一菲', '曾小贤', '关谷神奇'];
alert(passGame(names, 4));