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()
    }



相关文章
|
2月前
|
存储 监控 安全
企业上网监控系统中红黑树数据结构的 Python 算法实现与应用研究
企业上网监控系统需高效处理海量数据,传统数据结构存在性能瓶颈。红黑树通过自平衡机制,确保查找、插入、删除操作的时间复杂度稳定在 O(log n),适用于网络记录存储、设备信息维护及安全事件排序等场景。本文分析红黑树的理论基础、应用场景及 Python 实现,并探讨其在企业监控系统中的实践价值,提升系统性能与稳定性。
60 1
|
2月前
|
存储 监控 算法
基于跳表数据结构的企业局域网监控异常连接实时检测 C++ 算法研究
跳表(Skip List)是一种基于概率的数据结构,适用于企业局域网监控中海量连接记录的高效处理。其通过多层索引机制实现快速查找、插入和删除操作,时间复杂度为 $O(\log n)$,优于链表和平衡树。跳表在异常连接识别、黑名单管理和历史记录溯源等场景中表现出色,具备实现简单、支持范围查询等优势,是企业网络监控中动态数据管理的理想选择。
64 0
|
4月前
|
监控 算法 JavaScript
公司局域网管理视域下 Node.js 图算法的深度应用研究:拓扑结构建模与流量优化策略探析
本文探讨了图论算法在公司局域网管理中的应用,针对设备互联复杂、流量调度低效及安全监控困难等问题,提出基于图论的解决方案。通过节点与边建模局域网拓扑结构,利用DFS/BFS实现设备快速发现,Dijkstra算法优化流量路径,社区检测算法识别安全风险。结合WorkWin软件实例,展示了算法在设备管理、流量调度与安全监控中的价值,为智能化局域网管理提供了理论与实践指导。
116 3
|
4月前
|
存储 监控 算法
公司内部网络监控中的二叉搜索树算法:基于 Node.js 的实时设备状态管理
在数字化办公生态系统中,公司内部网络监控已成为企业信息安全管理体系的核心构成要素。随着局域网内终端设备数量呈指数级增长,实现设备状态的实时追踪与异常节点的快速定位,已成为亟待解决的关键技术难题。传统线性数据结构在处理动态更新的设备信息时,存在检索效率低下的固有缺陷;而树形数据结构因其天然的分层特性与高效的检索机制,逐渐成为网络监控领域的研究热点。本文以二叉搜索树(Binary Search Tree, BST)作为研究对象,系统探讨其在公司内部网络监控场景中的应用机制,并基于 Node.js 平台构建一套具备实时更新与快速查询功能的设备状态管理算法框架。
116 3
|
6月前
|
算法 数据可视化 开发者
为什么要学习数据结构与算法
今天,我向大家介绍一门非常重要的课程——《数据结构与算法》。这门课不仅是计算机学科的核心,更是每一位开发者从“小白”迈向“高手”的必经之路。
为什么要学习数据结构与算法
|
6月前
|
监控 算法 JavaScript
企业用网络监控软件中的 Node.js 深度优先搜索算法剖析
在数字化办公盛行的当下,企业对网络监控的需求呈显著增长态势。企业级网络监控软件作为维护网络安全、提高办公效率的关键工具,其重要性不言而喻。此类软件需要高效处理复杂的网络拓扑结构与海量网络数据,而算法与数据结构则构成了其核心支撑。本文将深入剖析深度优先搜索(DFS)算法在企业级网络监控软件中的应用,并通过 Node.js 代码示例进行详细阐释。
110 2
|
6月前
|
存储 算法 JavaScript
基于 Node.js 深度优先搜索算法的上网监管软件研究
在数字化时代,网络环境呈现出高度的复杂性与动态性,上网监管软件在维护网络秩序与安全方面的重要性与日俱增。此类软件依托各类数据结构与算法,实现对网络活动的精准监测与高效管理。本文将深度聚焦于深度优先搜索(DFS)算法,并结合 Node.js 编程语言,深入剖析其在上网监管软件中的应用机制与效能。
89 6
|
6月前
|
JavaScript 前端开发 算法
JavaScript 中通过Array.sort() 实现多字段排序、排序稳定性、随机排序洗牌算法、优化排序性能,JS中排序算法的使用详解(附实际应用代码)
Array.sort() 是一个功能强大的方法,通过自定义的比较函数,可以处理各种复杂的排序逻辑。无论是简单的数字排序,还是多字段、嵌套对象、分组排序等高级应用,Array.sort() 都能胜任。同时,通过性能优化技巧(如映射排序)和结合其他数组方法(如 reduce),Array.sort() 可以用来实现高效的数据处理逻辑。 只有锻炼思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
|
存储 JavaScript 算法
JS数据结构&算法学习——数组
数组是我们的老朋友了,一般情况,数组是用来存储同一数据类型的值,比如说一个数组内存有一系列对象形式,存储一系列字符串,一系列数值,等等
215 2
JS数据结构&算法学习——数组
|
JavaScript 算法
JS数据结构&算法学习——栈
为什么说栈是一种受限的数据结构呢?栈和数组不同,如果我们想删除或者插入数组中的某一个元素后,其没有限制,但是栈不同,由于他的结构原因,他的操作是受限制的。
192 2
JS数据结构&算法学习——栈

热门文章

最新文章