• 原生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

    (完)

  • 相关阅读:
    ant build 报 warning modified in the future
    JQUERY选择器大全(转载)
    MAVEN实践经验
    Jquery ajax参数设置(转)
    解决WIN7下pl/sql连接弹出空白提示框问题
    getContextPath、getServletPath、getRequestURI的区别
    HTTP协议
    构建接口层快速稳定的质量保证体系
    接口测试流程
    接口测试的意义
  • 原文地址:https://www.cnblogs.com/wangjiachen666/p/9462914.html
Copyright © 2020-2023  润新知