javascript:数据结构——队列

2023-05-16

什么是对列

是一种“先进先出”的数据结构。(如排队候车,肯定是先排队的人先上车)
在这里插入图片描述

实际用处

如打印机

队列操作

在这里插入图片描述

使用数组实现队列结构

在这里插入图片描述

使用类封装队列操作

const Queue = function () {
        
  const items = []; //私有的,只能在函数内部十使用,外部访问不到
  // this.items = [];//共有的,外部可以访问

  // 入队
  this.enQueue = function (element) {
    items.push(element)
  }

  // 出队
  this.deQueue = function(){
    // 这里使用 return 是为了返回删除的元素
    return items.shift()
  }

  // 查看列头
  this.front = function(){
    return items[0]
  }

  // isEmpty 队列是否为空(一般is开头命名的返回Boolean类型)
  this.isEmpty = function(){
    return items.length == 0
  }

  // size 检查队列元素个数
  this.size = function(){
    return items.length
  }

  // 检查items
  this.getItems = function(){
    return items
  }
}

使用队列实现击鼓传花例子

问题:假设有a,b,c,d,e,f等玩家在玩游戏,当花每传到第三个人的时候,就淘汰当前的这个人,到最后剩的最后一个玩家为赢家
解释:
游戏开始是从a开始的
红色是第一轮 淘汰的是c f ,留下的是a b d e ,当前小花在a玩家手里,a是当前传到的第一个人
在这里插入图片描述

绿色是第二轮 淘汰的是d ,留下的是a b e ,当前小花在a玩家手里,a是当前传到的第一个人
在这里插入图片描述

橙色是第三轮 淘汰的是b ,留下的是a e ,当前小花在a玩家手里 a是当前传到的第二个人
在这里插入图片描述

灰色是第四轮 淘汰的是e ,留下的是a
在这里插入图片描述

所以最后的赢家是a
按照队列的思路:把玩家每次是3的放在队列的第一个,并且踢它出局,第一个第二个就放在队列的最后。
在这里插入图片描述

依次论推。。。。。
结果还是一样,最后的赢家是a玩家
废话不多说,上代码

//参数一:玩家列表
//参数二:传的数字
const flowers = function (wanjia, num) {

  // 把所有的玩家放在一个队列中
  var queue = new Queue();
  wanjia.map(item => {
    queue.enQueue(item)
  })

  var taotai;
  while (queue.size() > 1) {
    // 把拿到不等于num的玩家,重新放在队列的最后
    for (let i = 1; i < num; i++) {
      queue.enQueue(queue.deQueue())
    }
    // 把拿到等于num的玩家出队(淘汰的玩家)
    taotai = queue.deQueue();
    console.log("淘汰的玩家是:", taotai);

  }

  // return 最后的赢家
  return queue.deQueue()

}

在这里插入图片描述

优先队列

什么是优先队列?
比如我们住酒店上电梯,所有人都在排队,但是酒店会员(vip)他们就有权限优先上电梯
在比如在机场登机,vip会员就有权限优先登机等。

const PriorityQueue = function () {

  const items = [];

  // 定义一个辅助类,用来生成对象(构造器)
  this.itemQueue = function (element, vipnumber) {
    this.element = element
    this.vipnumber = vipnumber
  }

  // 入列
  this.enQueue = function (element, vipnumber) {//vipnumber相当等级,等级越高优先级越高
    const itemqueue = new itemQueue(element, vipnumber);
    const whether = false
    for (let i = 0; i < items.length; i++) {
      if (items[i].vipnumber < itemqueue.vipnumber) {
        items.splice(i,0,itemqueue);
        whether = true;
        break; //跳出循环
      }
    }

   if(!whether){
      items.push(itemqueue)
    }
  }

  // 返回items
  this.getItems  = function(){
    return items
  }
}

// 辅助类用来生成对象
const itemQueue = function (element, vipnumber) {
  this.element = element
  this.vipnumber = vipnumber
}

let itemqueue = new itemQueue("张参", 18)
console.log(itemqueue1); //{element: '张参1', vipnumber: 18}

在这里插入图片描述

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

javascript:数据结构——队列 的相关文章

随机推荐

  • 推荐关于PX4 ECL EKF方程推导的两篇“宝藏“文章

    文章目录 一 PX4 的 ECL EKF 公式推导及代码解析 by 赵祯卿二 PX4 的 ECL EKF2 方程推导 by shuyong chen PX4的ECL EKF开源代码已经比较广泛地应用到很多无人机飞控项目中 该开源项目可以融合
  • js用冒泡解释回调函数

    回调函数的概念 就是自己定义一个函数 xff0c 然后再调用 从而实现这个函数的程序内容 xff0c 然后把这个函数作为另一个函数的参数传入 js代码会至上而下一条线执行下去 xff0c 但是有时候我们需要等到一个操作结束之后再进行下一个操
  • 跨域的解决方案(反向代理)

    反向代理 在前后端分离开发的场景 xff0c 前端有个服务器 xff08 提供页面 xff09 后端也有个服务器 xff08 提供接口 xff09 1 开发环境 xff0c 前端要连后端的接口 xff0c 就会出现跨域问题 2 生产 xff
  • React路由传参常见的几种方式

    React路由传参 解释 xff1a 路由传参完成的是组件之间的数据传递 xff08 组件传值 xff09 1 xff09 params 路由配置 xff1a span class token operator lt span Route
  • React路由里exact和switch的区别

    React路由里exact和switch的区别 exact属性 react的路由匹配默认是模糊的 xff0c 包容的 xff0c 如果想使用严格匹配 xff0c 那么 xff0c 把Route组件的exact属性设置为true span c
  • React路由提供常用组件的详解

    路由提供组件的详解 组件及其作用 xff1a 组件作用路由模式BrowserRouter约定模式 为 history xff0c 使用 HTML5 提供的 history API 来保持 UI 和 URL 的同步路由模式HashRouter
  • 使用Microsoft Visual Studio 2013 自带nmake工具出现NMAKE : fatal error U1077错误

    最近在研究Git上一个打开串口的项目 xff0c 名叫jSerialComm xff0c 地址https github com Fazecast jSerialComm 根据项目README md的指导 xff0c 进行到build阶段遇到
  • 前端将json数据和动态数组数据转换为Excel文件下载

    https blog csdn net friend ship article details 100582537
  • github在项目中使用的过程,包括账号的创建,密钥的查看

    项目中使用github的过程 xff0c 包括账号的创建 xff0c 密钥的查看 官网 xff1a https github com 1 注册账号和密码 2 创建好了之后 xff0c 新建一个仓库 3 填写仓库名称及说明 xff0c 创建仓
  • vscode中使用git,超级无敌简单

    vscode中使用git xff0c 超级无敌简单 一 复制远端地址 https gitee com zhaojia77 react foot git 二 打开vscode 1 点击源代码管理 2 点击克隆存储库 3 输入框里粘贴上你的远端
  • mongodb的安装及使用,增删改查的基本命令

    mongodb的安装及使用 xff0c 增删改查的基本命令 1 先安装MongoDB 2 在安装可视化工具 Robo 3T 1 3 1 3 找到安装MongoDB目录 xff0c 进入bin目录打开命令行 4 先在f盘创建一个data文件夹
  • Vue的官方指令

    Vue的官方指令 插值表达式 xff08 xff09 内容指令 xff08 v text和v html xff09 相同点 xff1a 都是可以让html标签里的内容变成动态的 不同点 xff1a v text和 相当于innerText不
  • 阿里OSS上传文件的两种方式的详解

    阿里OSS上传文件 一 为什么要使用云存储 xff1f 1 存储费用低 xff0c 不占用服务器的磁盘空间 2 流量费用低 xff0c 上传或下载不占用服务器带宽 二 怎么使用云存储 xff1f 方法一 xff1a javascript客户
  • antd设置表单的某个字段的值

    antd设置表单的某个字段的值 1 创建form的实例 const span class token punctuation span formObj span class token punctuation span span class
  • 数组去重,并且数组的每一项是对象object

    span class token keyword function span obj2key span class token punctuation span obj keys span class token punctuation s
  • javascript函数声明和函数表达式的区别

    一 首先它们写法不一样 xff0c 我们先写一个函数声明 函数表达式的dome span class token comment 1 函数声明 span span class token keyword let span ceshi1 sp
  • antd表单回显

    一 利用initialValue 适用于初始化固定的值 Form 的 initialValues 与 Item 的 initialValue 区别 xff1f 在大部分场景下 xff0c 我们总是推荐优先使用 Form 的 initialV
  • Netty远程桌面demo

    https github com leisuredong RemoteDesktop 从远端服务器获取屏幕截图展示在本地客户端窗口 xff0c 可以在服务端通过鼠标键盘控制远端机器
  • javascript:数据结构——栈

    栈结构的概念 是一种 后进先出 的数据结构 栈作用 在编程语的编译器和内存中保存变量 方法调用 栈操作 栈结构操作的方法 push xff1a 进栈 pop xff1a 出栈 peek xff1a 检查栈顶元素 isEmpty xff1a
  • javascript:数据结构——队列

    什么是对列 是一种 先进先出 的数据结构 xff08 如排队候车 xff0c 肯定是先排队的人先上车 xff09 实际用处 如打印机 队列操作 使用数组实现队列结构 使用类封装队列操作 span class token keyword co