JS数据结构&算法学习——优先队列

简介: 我们在了解过队列之后,有没有考虑过优先级队列的事情呢?

优先级队列

我们在了解过队列之后,有没有考虑过优先级队列的事情呢?

概念

我们知道普通的队列想要添加元素,元素会被在队尾入队,但是优先级队列它在考虑添加一个元素的时候会考虑添加数据的优先级,即将我们即将插入数据的优先级与其他数据的优先级一一进行比较,在之后我们就可以得到将要添加的元素在队列中正确的位置。

生活中的应用

  1. VIP优先:我们生活中最能体现优先级队列的就是在排队过程中的VIP通道了,当我们在按照队列进行排队的时候,下一个进入的人是VIP,按理说他是应该在队尾添加,但是由于优先级的原因,高于我们这些普通顾客,他就会通过VIP通道被添加到正确的位置
  2. 道德优先:在我们正常排队去挂号的时候,是按照队列来进行排队的,但是会有需要紧急救治的病人,这个时候就体现了优先级的特点,医生会优先救治那些需要紧急救治的病人。

程序应用

在之前的队列中有提到过,线程队列是按照线程次序来执行的,这个时候如果按照线程的优先级大小来排列,就是通过优先级队列来执行

封装

在封装优先级队列之前,我们需要考虑的是我们如何进行优先级比较以及比较规则

当我们的普通的队列拿来看的话,我们是无法对其元素进行比较的,所以我们需要每个元素需要额外的一个能表达该元素优先级的值来体现该元素的优先级,这样我们才能对其优先级进行比较并形成优先级队列,封装如下

function priorityQueue() {
    //队列的属性
    function QueueElement(element, priority) {
      this.element = element
      this.priority = priority
    }
    this.items = []
    //队列的相关操作
    priorityQueue.prototype.enqueue = function (element, priority) {
      //1.创建对象
      var QueueElement = new QueueElement(element, priority)
      this.items.push(element)
    }
}
复制代码

大家可以明显的注意到,我们在优先级队列这个类中又声明了一个类,由于元素具有原本的值与优先级两个数据,所以我们需要在类中再声明一个类,之后的操作封装也是在函数中创建新类,其中element为数据,priority为优先级

那么我们现在开始考虑我们如何得去比较并按优先级排序

  1. 当队列没有元素,只需要添加元素,无序比较
  2. 当队列中有元素,我们需要将添加的元素与前一个数据比较,若小则再比较,直到遇到优先级大的并插入到后面
priorityQueue.prototype.enqueue = function (element, priority) {
      var QueueElement = new QueueElement(element, priority)
      if (this.items.length == 0) {
          this.items.push(QueueElement)
      } else {
          var add = false
          for (let i = 0; i < this.items.length; i++){
              if (QueueElement.priority < this.items[i]){
                  this.items.splice(i,0,QueueElement)
                  add = true
                  break
              }
          }
          if(!add) {
              this.items.push(QueueElement)
          }
      }
}
复制代码

在这里我们首先会进行对队列是否为空判断,可以用自己封装的isEmpty也可以使用length直接进行判断,如果为空则直接插入,接下里如果队列不为空,则声明一个变量表达状态,如果与前面的元素进行比较,优先级都比被添加元素大的话add为false,则执行下面的部分,直接添加到队尾,如果找到了优先级小的元素,则使用splice的方法来进行插入


目录
打赏
0
0
0
0
69
分享
相关文章
内网网管软件中基于 Node.js 的深度优先搜索算法剖析
内网网管软件在企业网络中不可或缺,涵盖设备管理、流量监控和安全防护。本文基于Node.js实现深度优先搜索(DFS)算法,解析其在网络拓扑遍历中的应用。通过DFS,可高效获取内网设备连接关系,助力故障排查与网络规划。代码示例展示了图结构的构建及DFS的具体实现,为内网管理提供技术支持。
41 11
JavaScript 中通过Array.sort() 实现多字段排序、排序稳定性、随机排序洗牌算法、优化排序性能,JS中排序算法的使用详解(附实际应用代码)
Array.sort() 是一个功能强大的方法,通过自定义的比较函数,可以处理各种复杂的排序逻辑。无论是简单的数字排序,还是多字段、嵌套对象、分组排序等高级应用,Array.sort() 都能胜任。同时,通过性能优化技巧(如映射排序)和结合其他数组方法(如 reduce),Array.sort() 可以用来实现高效的数据处理逻辑。 只有锻炼思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
JS数组操作方法全景图,全网最全构建完整知识网络!js数组操作方法全集(实现筛选转换、随机排序洗牌算法、复杂数据处理统计等情景详解,附大量源码和易错点解析)
这些方法提供了对数组的全面操作,包括搜索、遍历、转换和聚合等。通过分为原地操作方法、非原地操作方法和其他方法便于您理解和记忆,并熟悉他们各自的使用方法与使用范围。详细的案例与进阶使用,方便您理解数组操作的底层原理。链式调用的几个案例,让您玩转数组操作。 只有锻炼思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
基于问题“如何监控局域网内的电脑”——Node.js 的 ARP 扫描算法实现局域网内计算机监控的技术探究
在网络管理与安全领域,监控局域网内计算机至关重要。本文探讨基于Node.js的ARP扫描算法,通过获取IP和MAC地址实现有效监控。使用`arp`库安装(`npm install arp`)并编写代码,可定期扫描并对比设备列表,判断设备上线和下线状态。此技术适用于企业网络管理和家庭网络安全防护,未来有望进一步提升效率与准确性。
39 8
架构学习:7种负载均衡算法策略
四层负载均衡包括数据链路层、网络层和应用层负载均衡。数据链路层通过修改MAC地址转发帧;网络层通过改变IP地址实现数据包转发;应用层有多种策略,如轮循、权重轮循、随机、权重随机、一致性哈希、响应速度和最少连接数均衡,确保请求合理分配到服务器,提升性能与稳定性。
431 11
架构学习:7种负载均衡算法策略
企业局域网监控软件中 Java 优先队列算法的核心优势
企业局域网监控软件是数字化时代企业网络安全与高效运营的基石,犹如一位洞察秋毫的卫士。通过Java实现的优先队列算法,它能依据事件优先级排序,确保关键网络事件如异常流量、数据泄露等被优先处理,保障系统稳定与安全。代码示例展示了如何定义网络事件类并使用PriorityQueue处理高优先级事件,尤其在面对疑似风险时迅速启动应急措施。这一核心技术助力企业在复杂网络环境中稳健前行,护航业务腾飞。
70 32
深度剖析:共享文件怎么设置密码和权限的 Node.js 进阶算法
在数字化时代,共享文件的安全性至关重要。本文聚焦Node.js环境,介绍如何通过JavaScript对象字面量构建数据结构管理文件安全信息,包括使用`bcryptjs`库加密密码和权限校验算法,确保高效且安全的文件共享。通过实例代码展示加密与权限验证过程,帮助各行业实现严格的信息资产管理与协作。
局域网网络管控里 Node.js 红黑树算法的绝妙运用
在数字化办公中,局域网网络管控至关重要。红黑树作为一种自平衡二叉搜索树,凭借其高效的数据管理和平衡机制,在局域网设备状态管理中大放异彩。通过Node.js实现红黑树算法,可快速插入、查找和更新设备信息(如IP地址、带宽等),确保网络管理员实时监控和优化网络资源,提升局域网的稳定性和安全性。未来,随着技术融合,红黑树将在网络管控中持续进化,助力构建高效、安全的局域网络生态。
65 9
基于 Node.js Socket 算法搭建局域网屏幕监控系统
在数字化办公环境中,局域网屏幕监控系统至关重要。基于Node.js的Socket算法实现高效、稳定的实时屏幕数据传输,助力企业保障信息安全、监督工作状态和远程技术支持。通过Socket建立监控端与被监控端的数据桥梁,确保实时画面呈现。实际部署需合理分配带宽并加密传输,确保信息安全。企业在使用时应权衡利弊,遵循法规,保障员工权益。
71 7
深度探秘:运用 Node.js 哈希表算法剖析员工工作时间玩游戏现象
在现代企业运营中,确保员工工作时间高效专注至关重要。为应对员工工作时间玩游戏的问题,本文聚焦Node.js环境下的哈希表算法,展示其如何通过快速查找和高效记录员工游戏行为,帮助企业精准监测与分析,遏制此类现象。哈希表以IP地址等为键,存储游戏网址、时长等信息,结合冲突处理与动态更新机制,确保数据完整性和时效性,助力企业管理层优化工作效率。
39 3

热门文章

最新文章