// 队列的应用 let Queue = require('./01队列的封装') /** * 使用队列实现小游戏:击鼓传花, * 传入一组数据和设定的数字num,循环遍历数组内元素, * 遍历到的元素为指定数字num时将该元素删除,直至数组剩下一个元素。 */ // 队列应用:面试题:击鼓传花 let passGame = (nameList, num) => { //1.创建队列结构 let queue = new Queue() //2.将所有人依次加入队列 // 这是ES6的for循环写法,i相当于nameList[i] for (let i of nameList) { queue.enQueue(i) } // 3.开始数数 while (queue.size() > 1) { //队列中只剩1个人就停止数数 for (let i = 0; i < num - 1; i++) { /** * 思路是这样的,由于队列没有像数组一样的下标值不能直接取到某一元素, * 所以采用,把num前面的num-1个元素先删除后添加到队列末尾, * 这样第num个元素就排到了队列的最前面, * 可以直接使用dequeue方法进行删除 * 如此循环往复即可 * */ queue.enQueue(queue.deQueue()) } // num对应这个人,直接从队列中删除 queue.deQueue() } //4.获取剩下的那个人 let number="还剩下人的个数是:"+queue.size() console.log(number); let endName = queue.frontQueue() console.log('最终剩下的人:' + endName); // 返回这个人对应的下标 let result="该人员对应的下标是:"+nameList.indexOf(endName) return result } module.exports=passGame
测试代码
let passGame=require('./03队列应用-击鼓传花') //5.测试击鼓传花 let names = ['lily', 'lucy', 'Tom', 'Lilei', 'Tony'] console.log(passGame(names,3));
结果