队列应用-击鼓传花
作者:互联网
// 队列的应用
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));
结果
标签:击鼓,num,队列,元素,queue,传花,let 来源: https://www.cnblogs.com/NaziriteGTC/p/16417663.html