• JavaScript数据结构与算法(四) 循环队列的实现


    实现击鼓传花,需要用到上一章所述队列类Queue

    TypeScript方式实现源码

     1 let hotPotato = (nameList, num) => {
     2     let queue = new Queue();
     3 
     4     for (let i = 0; i < nameList.length; i++) {
     5         queue.enqueue(nameList[i]);
     6     }
     7     let eliminated = '';
     8     while (queue.size() > 1) {
     9         for (let i = 0; i < num; i++) {
    10             queue.enqueue(queue.dequeue());
    11         }
    12         eliminated = queue.dequeue();
    13         console.log(eliminated + '在击鼓传花游戏中被淘汰');
    14     }
    15     return queue.dequeue();
    16 }
    17 // 使用示例
    18 let names = ['John', 'Jack', 'Camila', 'Ingrid', 'Carl'];
    19 let winner = hotPotato(names, 7);
    20 console.log('胜利者:' + winner);
    21 // 以上算法输出
    22 // Camilaza在击鼓传花游戏中被淘汰
    23 // Jack在击鼓传花游戏中被淘汰
    24 // Carl在击鼓传花游戏中被淘汰
    25 // Ingrid在击鼓传花游戏中被淘汰
    26 // 胜利者:John
    27 
    28 // 下图模拟了这个输出过程:

    JavaScript方式实现源码

     1 var hotPotato = function (nameList, num) {
     2     var queue = new Queue();
     3     for (var i_1 = 0; i_1 < nameList.length; i_1++) {
     4         queue.enqueue(nameList[i_1]);
     5     }
     6     var eliminated = '';
     7     while (queue.size() > 1) {
     8         for (var i_2 = 0; i_2 < num; i_2++) {
     9             queue.enqueue(queue.dequeue());
    10         }
    11         eliminated = queue.dequeue();
    12         console.log(eliminated + '在击鼓传花游戏中被淘汰');
    13     }
    14     return queue.dequeue();
    15 };
    // 代码角度:
    //     循环队列以队列的数据结构为基础,利用队列出与进方法将首尾链接起来
    //     进行扩展,以此实现循环效果
    // 抽象:
    //     利用循环队列的数据结构来描述击鼓传花这个游戏,鼓手敲动,传花开始当
    //     鼓声停止收到花的玩家淘汰,以此类推剩下最后一名则胜出
    // 总结:
    //     该数据结构抽象模拟的击鼓传花并不完善,因为有规律可循,并且鼓手每次
    //     只敲7下明显是bug,为了完善模拟场景真实性,我给出的解决方案是给出一
    //     个范围值,每次敲鼓随机从该范围随机取敲鼓次数
  • 相关阅读:
    第一次作业:准备
    结对项目-四则运算 “软件”之升级版
    第三次作业:个人项目-小学四则运算 “软件”之初版
    分布式版本控制系统Git的安装与使用
    第一次作业9.6
    C语言--数据类型
    C语言--函数
    C语言--嵌套循环
    C语言--输入输出格式
    DateGrip连接Oracle,MySQL
  • 原文地址:https://www.cnblogs.com/menu/p/6963996.html
Copyright © 2020-2023  润新知