JS实现队结构及利用队列模拟‘击鼓传花’游戏

简述

队列,是一种遵从先进先出(FIFO,First-In-First-Out)原则的有序集合。队列在尾部添加新元素,并从顶部移除元素,最新添加的元素必须排在队列的末尾。

代码说明

首先,先创建一个类表示队列,并且初始化一个空数组,用来保存队列里的元素

  class Queue {
    constructor() {
      this.items = [];
    };
  } 

接着,给这个队列声明一些方法:

1.enqueue(value):进队,添加一个新元素到队列末尾
2.dequeue():出队,移除队列中的第一个元素,同时返回该元素
3.front():获取队列中的第一个元素
4.isEmpty():判断队列是否为空。是返回true,否返回fallse
5.clear():清空队列里的元素
6.size():获取队列里元素的个数
具体代码
class Queue {
    constructor() {
      this.items = [];
    }

    //进队,从队的尾部进入
    enqueue(value) {
      this.items.push(value);
    }

    //出队,从队的头部出
    dequeue() {
      return this.items.shift();
    }

    //获取队中的第一个元素
    front() {
      return this.items[0];
    }

    //判断队是否为空
    isEmpty() {
      return this.items.length === 0;
    }

    //获取队中元素的个数
    size() {
      return this.items.length;
    }
  }

在这里,我们可以利用队列模拟‘击鼓传花’的游戏:

/*
*名称:击鼓传花
*参数:nameArr,为一个数组,包含了参与该游戏的所有人员名字;
*     num,击鼓的次数
*返回:最终游戏胜利者的名字
*/
  function JGCH(nameArr, num) {
    var queue = new Queue();  //实例化一个队列
    for (var i = 0; i < nameArr.length; i++) {
      queue.enqueue(nameArr[i]); //将传入的数组中的人员名字加入到队列中
    }
    var taotai = '';
    while (queue.size() > 1) {
      for (var i = 0; i < num; i++) {
      //每击一次鼓,将队列开头的一项移至队尾
        queue.enqueue(queue.dequeue());
      }
      //击鼓停止,拿着花的那个人即被淘汰,移出队列
      taotai = queue.dequeue();
      console.log(taotai + '被淘汰!!!');
    }
    //最后队列里剩下的那个人即为最终胜利者
    return queue.dequeue();
  }
var nameArr = ['郭靖', '张无忌', '乔峰', '虚竹', '段誉'];
console.log('最终胜利者是:' + JGCH(nameArr, 10));

游戏结果:
这里写图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值