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

简介: 在之前的栈,是一种受限的线性结构,为先进后出,那么同为线性结构的队列,特点又是怎么样的呢?

队列

在之前的栈,是一种受限的线性结构,为先进后出,那么同为线性结构的队列,特点又是怎么样的呢?

概念

队列是一种受限的线性表,先进先出,它只允许我们在表的前端进行删除操作,在表的后端进行添加操作。

生活应用

  1. 在生活中最常看到的队列场景就是排队了,即我们在排队时,排头也就是我们的表头,它允许出去,无法进行插队也就是添加操作,而排尾,也就是我们的表尾,它允许有人进行排队,即添加操作
  2. 在火车检票的时候,我们正常的是进行排队,而军人,老人等特殊人群可以优先进行处理,这就是优先队列。

程序应用

  1. 就拿我们JS来说,事件队列是比较常见的,因为JS是一门单线程语言,即在我们触发我们的函数的时候,会有一个事件队列,其会按照事件的触发顺序来执行,即先触发先执行,这就是队列的一种体现
  2. 当然线程队列也是一种队列的体现,我们一般为了任务能够并行处理,会用到多线程,但是多个线程会占据非常多的内存,所以这个时候我们可以通过使用线程队列,按照次序来启动线程,并处理对应的任务。

队列结构

当然队列结构的实现和栈一样,可以通过数组和链表实现

首先我们先封装一下队列

function queue(){
    //队列的属性
    this.items = []
    //队列的相关操作
}
var queue = new queue()
复制代码

因为JS中的类是基于对象的所以我们封装了一个队列类,在类中我们可以定义队列的属性与方法,封装好之后我们可以去通过调用来对队列实现一些操作

常见操作及封装

  1. enqueue(element):在队列的尾部添加元素
  2. dequeue():移除队列的首个元素,并返回其值
  3. front():返回队列的第一个元素
  4. isEmpty:判断队列是否为空队列
  5. size:返回队列长度
  6. toString():转换字符串

enqueue(element):使用push方法来进行入队封装

queue.prototype.enqueue = function (element) {
      this.items.push(element)
}
复制代码

dequeue():通过JS提供的shift的方法来进行出队操作

queue.prototype.delet = function () {
      return this.items.shift()
}
复制代码

front():直接通过数组下标来返回队首元素

queue.prototype.front = function () {
      return this.items[0]
}
复制代码

isEmpty():通过数组的length来进行栈的判空

queue.prototype.isEmpty = function () {
      return this.items.length == 0
}
复制代码

size()

queue.prototype.size = function () {
      return this.items.length
}
复制代码

toString():通过声明字符串变量,对栈进行遍历,通过JS字符串的特性,来进行字符串拼接,最后返回其字符串,其实现原理和栈的toString一样。

queue.prototype.toString = function () {
      var reString = ''
      for (let i = 0; i < this.items.length; i++) {
        reString += this.items[i] + ''
      }
      return reString
    }
复制代码

使用

在封装好之后我们就可以开始进行调用

queue.enqueue(1)
queue.enqueue(19)
queue.enqueue(11)
console.log(queue)
复制代码

1.webp.jpg

queue.delet()
console.log(queue)
复制代码

1.webp.jpg

大家可以试着自己些写一下并体验队列的这几种操作

击鼓传花

相信大家都玩过击鼓传花的游戏吧,击鼓的时候传递花朵,鼓声停,花在谁手中谁就受惩罚

现在有不同的游戏规则,即同学围成一圈,按阿拉伯数字顺序进行数数,当某人数到在场人数的时候就会被淘汰

我们现在要用队列来实现这个游戏并返回来最终获胜者的姓名

  1. 算法原理:

1.webp.jpg

现在我们将所有人按次序放入一个队列中,然后从队首开始出队入队,以此当出现在场人数的时候,其正好是队首,出队,多次操作,得到结果

  1. 算法实现:
  1. 创建队列并将所有人入队
var queue = new queue
    for (let i = 0; i < list.length; i++) {
     queue.enqueue(nameList[i])
}
复制代码
  1. 开始循环入队出队直到队列的长度为1
while (queue.size() > 1) {
      //开始数num,当不是num的时候出队后重新入队,当num是在场人数时,出队。
      for (let i = 0; i < num - 1; i++) {
        queue.enqueue(queue.dequeue())
      }
      //删除目标即现在的队首
      queue.dequeue()
    }



目录
打赏
0
0
1
0
69
分享
相关文章
内网网管软件中基于 Node.js 的深度优先搜索算法剖析
内网网管软件在企业网络中不可或缺,涵盖设备管理、流量监控和安全防护。本文基于Node.js实现深度优先搜索(DFS)算法,解析其在网络拓扑遍历中的应用。通过DFS,可高效获取内网设备连接关系,助力故障排查与网络规划。代码示例展示了图结构的构建及DFS的具体实现,为内网管理提供技术支持。
57 11
为什么要学习数据结构与算法
今天,我向大家介绍一门非常重要的课程——《数据结构与算法》。这门课不仅是计算机学科的核心,更是每一位开发者从“小白”迈向“高手”的必经之路。
为什么要学习数据结构与算法
企业用网络监控软件中的 Node.js 深度优先搜索算法剖析
在数字化办公盛行的当下,企业对网络监控的需求呈显著增长态势。企业级网络监控软件作为维护网络安全、提高办公效率的关键工具,其重要性不言而喻。此类软件需要高效处理复杂的网络拓扑结构与海量网络数据,而算法与数据结构则构成了其核心支撑。本文将深入剖析深度优先搜索(DFS)算法在企业级网络监控软件中的应用,并通过 Node.js 代码示例进行详细阐释。
34 2
基于 Node.js 深度优先搜索算法的上网监管软件研究
在数字化时代,网络环境呈现出高度的复杂性与动态性,上网监管软件在维护网络秩序与安全方面的重要性与日俱增。此类软件依托各类数据结构与算法,实现对网络活动的精准监测与高效管理。本文将深度聚焦于深度优先搜索(DFS)算法,并结合 Node.js 编程语言,深入剖析其在上网监管软件中的应用机制与效能。
32 6
Javascript常见算法详解
本文介绍了几种常见的JavaScript算法,包括排序、搜索、递归和图算法。每种算法都提供了详细的代码示例和解释。通过理解这些算法,你可以在实际项目中有效地解决各种数据处理和分析问题。
64 21
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`)并编写代码,可定期扫描并对比设备列表,判断设备上线和下线状态。此技术适用于企业网络管理和家庭网络安全防护,未来有望进一步提升效率与准确性。
56 8
内网监控管理软件:PHP 语言队列算法揭秘
在数字化办公环境中,内网监控管理软件对企业的稳定运行和信息安全至关重要。本文深入介绍PHP中的队列算法及其在内网监控软件中的应用,包括监控数据收集、任务调度和日志记录等场景,通过代码示例展示其实现方法。队列算法可提高性能、保证数据顺序并实现异步处理,为企业提供高效的安全保障。
33 1
架构学习:7种负载均衡算法策略
四层负载均衡包括数据链路层、网络层和应用层负载均衡。数据链路层通过修改MAC地址转发帧;网络层通过改变IP地址实现数据包转发;应用层有多种策略,如轮循、权重轮循、随机、权重随机、一致性哈希、响应速度和最少连接数均衡,确保请求合理分配到服务器,提升性能与稳定性。
534 11
架构学习:7种负载均衡算法策略

热门文章

最新文章

AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等