JS数据结构之队列(Queue)

2023-11-14

特点:先进先出(也叫FIFO:First In First Out)

结构图:

在这里插入图片描述
这跟我们生活中的排队买票很像:谁先排在前面,谁先买票 .
在这里插入图片描述

队列常见的操作

  • enqueue(el) : 向队列尾部添加一个新的项。
  • dequeue(): 移除队列的第一项,并返回被移除的元素。
  • front() :返回队列中的第一个元素,队列不做任何变动。
  • isEmpty() :如果队列中不包含任何元素返回 true,否则返回 false。
  • size() :返回队列包含的元素个数。
  • toString(): 将队列中的内容转成字符串形式。

代码实现

  class Queue {
   constructor() {
     this.items = [];
   }
   // 入队
   enqueue(item) {
     this.items.push(item);
   }

   // 出队
   dequeue(item) {
     return this.items.shift();
   }

   //队列第一个元素
   front() {
     return this.items[0];
   }
   // 队列是否空
   isEmpty() {
     return this.items.length === 0
   }

   //队列大小
   size() {
     return this.items.length;
   }


   //队列内容
   toString() {
     let result = '';
     for (let item of this.items) {
       result += item + " ";
     }
     return result;
   }

 }
 const queue = new Queue();

测试

//测试代码
// enqueue() 
queue.enqueue('a');
queue.enqueue('b');
queue.enqueue('c');
queue.enqueue('d');
console.log(queue.items); //["a", "b", "c", "d"]
// dequeue() 
queue.dequeue();
queue.dequeue();
console.log(queue.items); //["c", "d"]

// front() 
console.log(queue.front()); // c
// isEmpty() 
console.log(queue.isEmpty()); // false

// size() 
console.log(queue.size()); // 2
// toString() 
console.log(queue.toString()); //c d

队列应用:实现小游戏–击鼓传花。

想要的效果:

const names = ['lily', 'lucy', 'tom', 'tony', 'jack'];
const targetIndex = passGame(names, 4);
console.log('击鼓传花', names[targetIndex]); //--> lily

实现思路:
传入一组数据集合和设定的数字 number,循环遍历数组内元素,遍历到的元素为指定数字 number 时将该元素删除,如果不是 number 时,将number 数字之前的人重新放入到队尾,直至数组剩下一个元素。

实现代码:

function passGame(nameList, number) {
    const queue = new Queue();
    // 先组成一个队列
    for (let name of nameList) {
      queue.enqueue(name);
    }
    console.log("原始数组:", queue.items); //['lily']
    // 开始数数
    while (queue.size() > 1) {
      // 不是 number 时,重新加入到队尾
      // 是 number 时,将其删除
      for (let i = 0; i < number - 1; i++) {
        // 即把队头删除的元素,重新加入到队尾中
        queue.enqueue(queue.dequeue());
        console.log("非number加入队尾", queue.items);
      }
      queue.dequeue()
      console.log(`删除${number}后`, queue.items);
    }
    console.log("最终数组:", queue.items); //['lily']
    // 获取最后剩下的那个人
    const endName = queue.front();
    return nameList.indexOf(endName);
  }

  // passGame() 测试
  const names = ['lily', 'lucy', 'tom', 'tony', 'jack'];
  const targetIndex = passGame(names, 4);
  console.log('击鼓传花最终赢家是:', names[targetIndex]); //lily

过程说明(一看这个就懂了):
在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JS数据结构之队列(Queue) 的相关文章

  • RuntimeError:shape ‘[4, 3, 85, 80, 80]‘ is invalid for input of size 537600

    在对yolov5进行剪枝训练时出现以下类型的错误 错误原因 1 使用自己 的数据集时 数据集与源代码的数据集的类别数不同 没有修改成对应的类别数 解决办法 修改cfg文件 把classes和filters进行修改 filters class
  • 启用电脑对远程服务器的访问,未启用对服务器的远程访问 win10家庭版

    未启用对服务器的远程访问 win10家庭版 卡饭网 本站整理 2019 07 09 这个问题比较常见小编整理的解决方法如下 方法一 用QQ远程协助对方电脑 需要QQ告诉对方右键单击计算机 这台电脑 点管理 打开计算机管理界面 选择本地用户和
  • git 工具使用--分支管理

    git 工具使用 分支管理 文章目录 git 工具使用 分支管理 理解分支 创建分支 切换分支 合并分支 删除分支 合并冲突 分支管理策略 分支策略 bug分支 删除临时分支 总结 理解分支 分支管理是Git的杀手级功能之一 分支 就是科幻
  • Ajax的核心技术XMLHttpRequest方法

    整个Ajax技术紧紧围绕在XMLHttpRequest对象的周围 Ajax整个技术的过程如下 XMLHttpRequest发送请求 在与服务器交互中 其readyState状态可以监听到服务器 的响应状态 当服务器的响应完成的时候 XMLH

随机推荐

  • 【UiBot】RPA流程机器人有几种类型?

    RPA Robotic Process Automation 机器人流程自动化 是指通过软件自动化方式 使各个行业中本来是人工操作计算机完成的业务 实现工作流程的自动化 RPA机器人的交互方式大致可分为两大主要类型 人机交互型和无人值守型
  • JS逆向获取网易云音乐评论并保存到mongodb数据库

    JS逆向获取网易云音乐评论 前言 这段时间 一直在研究JS逆向 今天小试牛刀一下 利用JS逆向技术获取网易云音乐评论 一 分析网页 其实网易云音乐评论的api很好找到的 我们通过F12进入到浏览器 chrome 的开发者模式 因为音乐的评论
  • 递推均值滤波算法---链式队列实现

    目录 为什么要写这篇 为什么要用队列实现 程序是怎么实现的 程序实现结果 程序代码 为什么要写这篇 仍记得当初写了一篇去除极值的均值滤波算法相关的博客 该算法用在了ADC采样上面 当初偶然看见还有一种递推均值滤波算法 用在了实时波形输出上面
  • F2FS – A New Flash File System for Mobile Devices – ELCE 2012

    本文转载至 http www cnx software com 2013 01 15 f2fs a new flash file system for mobile devices elce 2012 Joo Young Hwang pri
  • 计算机视觉方面的代码

    Jia Bin Huang同学收集了很多计算机视觉方面的代码 链接如下 https netfiles uiuc edu jbhuang1 www resources vision index html 这些代码很实用 可以让我们站在巨人的肩
  • 罗马数字转换器

    我的CSDN主页 My Python 学习个人备忘录 我的博文推荐 罗马数字转换器 整数转罗马数字 本转换器 以1 3999的正整数为限 看到CSDN 每日一练 python 题目 罗马数字转整数 的练习题目 就想写个 整数转罗马数字 的练
  • 前缀和以及二分法解题

    1 寻找数组的中心索引 解法1 初始解法 思路 长度为1的数组 中心索引一定是它本身的那个唯一元素 左右两边的和都为0 长度为2的数组 除非两个元素都为0 那么这样才存在中心索引 且选最左边的0 长度大于等于2的数组 我们现在讨论普遍的情况
  • 查找std::vector最大值、最小值及相应的索引位置

    使用STL的vector时 利用函数max element min element distance可以获取vector中最大值 最小值和对应的位置索引 方法如下 include
  • 相似度量

    相似度量 MATLAB实现相似度计算 对数似然相似度 Jaccard相似度 余弦相似度 目录 相似度量 MATLAB实现相似度计算 对数似然相似度 Jaccard相似度 余弦相似度 基本描述 程序设计 学习总结 参考资料 基本描述 在数据分
  • 帆软 finereport FCRA 考试 题库+答案,共收录561题,大部分有答案

    帆软 finereport FCRA 考试 题库 答案 共收录561题 大部分有答案 入门基础 11 多选题 以下方式中属于FineReport中预览模式的有 分页预览 填报预览 新填报预览 数据分析 移动端预览 16 判断题 FineRe
  • 在MINI2440开发板上添加qtopia应用程序

    在MINI2440开发板上添加qtopia应用程序 2012 07 25 16 15 00 转载 标签 it 分类 Linux 一 将生成的 c h cpp这三个 放到一个文件夹里 拷贝其他的 pro 并修改做一个pro 文件 pro 内容
  • python九九乘法表:输入一个整数n,输出九九乘法表前n行的内容

    任务描述 相关知识 Python的格式化输出 使用 符号进行格式化输出 使用 format 进行格式化输出 使用 f string 进行格式化输出 编程要求 测试说明 任务描述 本关任务 编写一个能打印九九乘法表的小程序 相关知识 为了完成
  • 每日一题——螺旋矩阵

    题目描述 对于一个n行m列的表格 我们可以使用螺旋的方式给表格依次填上正整数 我们称填好的表格为一个螺旋矩阵 例如 一个4行5列的螺旋矩阵如下 1 2 3 4 5 14 15 16 17 6 13 20 19 18 7 12 11 10 9
  • 手把手教你如何创建虚拟环境,安装pytorch,文末提供安装包

    1 验证conda是否安装成功 在安装pytorch之前 需要验证coda安装是否成功 WIN R键 打开cmd 输入nvcc V 出现以下界面说明安装成功 并且知道版本为10 2 记住 2 创建虚拟环境 在命令窗口输入命令cona cre
  • 程序员2021最佳工作地,这里平均$280k年薪独领风骚!

    2021年哪个城市最适合STEM就业 近日WalletHub就给出了答案 在调查了包含STEM就业机会 友好度 生活质量 岗位空缺 薪资等各方面指标后 确定了一份2021年STEM最佳求职城市榜单 西雅图成功夺得桂冠 适合STEM最佳 最差
  • Vue小技巧-公共组件开发

    我们会遇到很多类似于这样的场景 公共组件弹窗 点击确定 取消按钮会执行某个函数 一般做法是同props把弹窗一些value function注入进去 然后子组件emit执行一下 但是这样有一个问题 就是太麻烦了 本文通过动态挂载组件的 方式
  • 国密SM4加密算法工具类(对称)

    国密SM4 author Luke lee public class SM4Util private static byte iv 1 2 3 4 5 6 7 8 private static final String CODE UTF8
  • 安装pycocotools包

    pycocotools包安装 失败原因 版本问题导致的 因为torch版本和pycocotools版本相对应 并不是什么版本都可以安装 于是需要选择相应的安装版本 1 在环境中直接使用pip install pycocotools命令安装时
  • Java基础进阶资料免费分享,需要的可以在评论区留言

    Java基础进阶资料免费分享 需要的可以在评论区留言 或者扫下方的微信获取 还有其他的福利大礼包赠送哦 赶快来领取试试真假吧
  • JS数据结构之队列(Queue)

    特点 先进先出 也叫FIFO First In First Out 结构图 这跟我们生活中的排队买票很像 谁先排在前面 谁先买票 队列常见的操作 enqueue el 向队列尾部添加一个新的项 dequeue 移除队列的第一项 并返回被移除