zoukankan      html  css  js  c++  java
  • 原生JS实现队结构及利用队列模拟‘击鼓传花’游戏

    1. 前言

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

    2.功能说明

    1. enqueue(value):进队,添加一个新元素到队列末尾
    2. dequeue():出队,移除队列中的第一个元素,同时返回该元素
    3. front():获取队列中的第一个元素
    4. isEmpty():判断队列是否为空。是返回true,否返回fallse
    5. clear():清空队列里的元素
    6. size():获取队列里元素的个数

    3. 代码实现

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

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

    接着,在这个队列类中实现所需要的功能:

    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;
        }
      }

    4. 测试

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

    /*
    *名称:击鼓传花
    *参数: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));

    游戏结果:

     5.完整代码

    完整代码请戳☞☞☞Queue.js

    (完)

  • 相关阅读:
    django rest framework 去掉url尾部的斜杠
    django url 参数
    windows系统C盘显示100G已用完,全选所有的文件夹查看却只有50G?
    关于RESTful名字的含义
    tensorflow 之 tf.reshape 之 -1
    关于python cv2-1.0(ImportError: No module named cv2)
    spark元组的列表转化为字典
    python 中的list 转 array 以及 array 转 list 以及array.array numpy.array
    web 版processing显示图片
    网页版的processing
  • 原文地址:https://www.cnblogs.com/wangjiachen666/p/9462914.html
Copyright © 2011-2022 走看看