数据结构—队列—数组形式
/*
* 队列受限的线性表
* 先进先出
* 从表的后端添加
* 从表的前端删除
* */
function Queue() {
// 属性
this.item = []
// 方法
// 向队列尾部添加一个或者多个新的项
Queue.prototype.enqueue = function (element) {
this.item.push(element)
}
//移除队列的第一项 并返回被移除的元素
Queue.prototype.dequeue = function () {
return this.item.shift()
}
// 返回队列中的第一个元素 最先被添加 也将是最先被删除的元素
Queue.prototype.front = function () {
return this.item[0]
}
// 如果队列不包含任何元素 返回true 否则返回false
Queue.prototype.isEmpty = function () {
return this.item.length === 0
}
// 返回队列包含的元素个数 与数组的length属性类似
Queue.prototype.size = function () {
return this.item.length
}
// 将队列中的内容 转成字符串形式
Queue.prototype.toString = function () {
let string = ''
for (var i = 0; i < this.item.length; i++) {
string += this.item[i] + ''
}
return string
}
}
经典面试题:
function getname(namelist,num) {
let queue = new Queue()
// 将数字 添加到队列中
for (let i = 0 ;i <namelist.length; i++){
queue.enqueue(namelist[i])
}
// 开始数数字 当数组的长度大于1 的时候停止
while (queue.size() > 1){
// 循环 遍历 一直到 循环结束 说明是到达了 num数字
for (let k = 0 ; k < num -1 ; k++){
queue.enqueue(queue.dequeue())
}
// 到达了 num 数字就要删除对应下标的的数组元素
queue.dequeue()
}
console.log('最终剩下的玩家:',queue.item[0])
}