击鼓传花 队列形式
一.队列的属性和方法:
1. enqueue(ele) 进入队列:向队列尾部添加。
2. dequeue() 出队:移除队列的第一个元素,并返回被移除的元素
3. front() 返回队列的第一个元素,只返回不出队
4. isEmpty() 判断队列是否为空
5. size() 返回队列包含元素的个数
下面通过队列来玩一个击鼓传花的游戏
<script> //模拟一个简单的队列 class newArr{ constructor(){ this.arr=[] } enqueue(element){//入队 this.arr.push(element) return element //返回进来的那个元素 } dequeue(){//出队 return this.arr.shift() //返回出队的那一个 } front(){//返回队列的第一个元素,只返回但不出列 if(this.arr.length>0){ return this.arr[0] }else{ return undefined } } isEmpty(){ return this.arr.length>0 } size(){//返回队列的长度 return this.arr.length } } let list = ['鲁班','程咬金','廉颇','夏侯惇','张飞','狂铁','八戒','老夫子'] //通过队列来模拟 击鼓传话游戏。被叫到的人物就要被踢出局,没被叫到的人物依次排队继续等待被叫,最终只有一个人胜出 function pass(list,num){//num代表第几个 let arr =new newArr() for(let i=0;i<list.length;i++){ arr.enqueue(list[i])//首先让他们成为队列 } while(arr.size()>1){//只要队列的长度大于1就让它循环 for(let i=0;i<num;i++){ arr.enqueue(arr.dequeue())//让不符合条件的人物先出队,然后再入队 } //此时符合条件的人物排到了第一个,把它踢出队列 arr.dequeue() } return arr.front()//返回最终胜利者 } console.log(pass(list,3))//狂铁胜利。 </script>