//队列结构: 受限的线性结构,尊从先进先出的原则。只允许从表的前端进行删除操作,从表的后端进行插入操作 // 队列的封装 class Queue { constructor() { this.items=[] } // 1.向队列尾部添加一个新的项 enqueue(element) { this.items.push(element) } // 2.移除队列第一项,并返回第一项 dequeue() { return this.items.shift() } // 3.返回队列中第一项 front() { return this.items[0] } // 4.判断队列中是否为空 isEmpty() { return this.items.length === 0 } // 5.获取队列中元素个数 size() { return this.items.length } // 6.toString toString() { return this.items.join(' ') } } // 队列应用 //几个人围成一圈,开始数数,数到某个数的人自动淘汰,然后下一个人从头开始数,依次类推 // 最后剩下的人在原来的什么位置 function startGame(people,num) { var queue= new Queue(); // people 中所有的元素 放入队列中 [].forEach.call(people,item=>{ queue.enqueue(item) }) while (queue.size()>1) { // 一直到队列中只有一个人为止 //从一开始报数,到num-1 for(var i=1;i<num-1;i++) { queue.enqueue(queue.dequeue()) } // 到num 队列中删除当前报数人 queue.dequeue() } // 最后剩下的人 let last= queue.front(); // 返回下标 return [].indexOf.call(people,last) }