在JavaScript中的数据结构(队列)

这篇具有很好参考价值的文章主要介绍了在JavaScript中的数据结构(队列)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

在JavaScript中的数据结构(队列)


什么是队列?

当我们在浏览器中打开新标签时,就会创建一个任务队列。这是因为每个标签都是单线程处
理所有的任务,它被称为事件循环。浏览器要负责多个任务,如渲染HTML,执行JavaScript代码,处理用户交互(用户输入、鼠标点击等),执行和处理异步请求。

队列(Queue)是一种具有先进先出(FIFO, First-In-First-Out)特性的数据结构,它可以用于在计算机程序中管理和存储元素。在JavaScript中,可以使用数组(Array)或链表(Linked List)等数据结构来实现队列。

其实可以用窗口排队打饭为案例,先来的先排队打饭。
在JavaScript中的数据结构(队列)


创建队列

队列主要有两个基本操作: 入队(enqueue)和出队(dequeue)。在队列中,新元素被添加到队列末尾,并等待其他已存在的元素被处理后才能被移除。当删除元素时,总是从队首开始移除元素。

新建队列

创建类来表示一个队列,先从最基本的声明类开始:

function Queue() { 
 //这里是属性和方法
} 

需要一个用于存储队列中元素的数据结构,使用数组,(Queue类和Stack类非常类似,只是添加和移除元素的原则不同):

function Queue() { 
 //用于存储队列中元素的数据结构
 let items = []; 
 //这里是属性和方法
} 

队列可用的方法

  • enqueue(element(s)):向队列尾部添加一个(或多个)新的项。
  • dequeue():移除队列的第一(即排在队列最前面的)项,并返回被移除的元素。
  • front():返回队列中第一个元素——最先被添加,也将是最先被移除的元素。队列不
    做任何变动(不移除元素,只返回元素信息——与Stack类的peek方法非常类似)。
  • isEmpty():如果队列中不包含任何元素,返回true,否则返回false。
  • size():返回队列包含的元素个数,与数组的length属性类似。

队列添加元素

首先要实现的是enqueue方法。这个方法负责向队列添加新元素。这里有一个非常重要的细
节,新的项只能添加到队列末尾:

this.enqueue = function(element){ 
 items.push(element); 
}; 

队列移除元素

接下来要实现dequeue方法。这个方法负责从队列移除项。由于队列遵循先进先出原则,
最先添加的项也是最先被移除的。可以用shift方法,shift方法会从数组中移除存储在索引0(第一个位置)的元素:

this.dequeue = function(){ 
 return items.shift(); 
};

只有enqueue方法和dequeue方法可以添加和移除元素,这样就确保了Queue类遵循先进先
出原则。

队列查看元素

查看队列头元素

现在来为我们的类实现一些额外的辅助方法。如果想知道队列最前面的项是什么,可以用
front方法。这个方法会返回队列最前面的项(数组的索引为0):

this.front = function(){ 
 return items[0]; 
};
检查队列是否为空

可以直接使用length == 0判断,如果队列为空,它会返回true,否则返回false):

this.isEmpty = function(){ 
 return items.length == 0; 
}; 
检查队列的长度

类似于数组的length属性,我们也能实现队列的length。对于集合,最好用size代替length。
因为队列的内部使用数组保存元素,所以能简单地返回队列的长度:

this.size = function(){ 
 return items.length; 
};
打印队列元素

为了检查队列元素,实现一个辅助方法print。把队列元素都输出到控制台:

this.print = function(){ 
 console.log(items.toString()); 
}; 

完整队列代码

function Queue() { 
 //用于存储队列中元素的数据结构
 let items = []; 
 //队列添加元素
 this.enqueue = function(element){ 
  items.push(element); 
 }; 
 //队列移除元素
 this.dequeue = function(){ 
  return items.shift(); 
 };
 //查看队列头元素
 this.front = function(){ 
  return items[0]; 
 };
 //检查队列的长度
 this.size = function(){ 
  return items.length; 
 };
 //打印队列元素
 this.print = function(){ 
  console.log(items.toString()); 
 }; 
} 

循环队列

循环队列,修改版的队列实现。为了解决假上溢问题,引入循环队列,即把向量空间想象为一个首尾相接的圆环,在循环队列中进行出队、入队操作时,头尾指针仍要加1,朝前移动。只不过当头尾指针指向向量上界(MAXNUM-1)时,其加1操作的结果是指向向量的下界0。
在JavaScript中的数据结构(队列)


优先队列是什么?

优先队列,队列修改版。元素的添加和移除是基于优先级的。现实的例子有就是机场登机的顺序,头等舱和商务舱乘客的优先级要高于经济舱乘客;迪士尼入园vip先入园等等。
实现一个优先队列,有两种选项:设置优先级,然后在正确的位置添加元素;或者用入列操
作添加元素,然后按照优先级移除它们。因此可以对它们使用默认的出列操作:
在JavaScript中的数据结构(队列)


总结

在JavaScript中,队列(Queue)是一种具有先进先出(FIFO, First-In-First-Out)特性的数据结构,它可以用于在计算机程序中管理和存储元素。队列中,新元素被添加到队列末尾,并等待其他已存在的元素被处理后才能被移除。当删除元素时,总是从队首开始移除元素。队列主要有两个基本操作: 入队(enqueue)和出队(dequeue),在JavaScript中可以使用数组(Array)或链表(Linked List)等数据结构来实现队列。除了入队和出队操作,队列还可以提供其他方法,如peek()返回队列头部的值、isEmpty()判断队列是否为空等等,但其基本实现都是基于入队和出队这两个基本操作。文章来源地址https://www.toymoban.com/news/detail-486328.html

到了这里,关于在JavaScript中的数据结构(队列)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • JavaScript中的数据结构和算法

    JavaScript不仅是一门用于网页交互的脚本语言,还可以用于编写高效的数据结构和算法。在本文中,我们将介绍JavaScript中可用的数据结构和常见的算法,并说明它们在实际应用中的用途和性能。 数据结构 数组 数组是JavaScript中最常见的数据结构之一,可以用来存储和访问一系

    2024年02月01日
    浏览(52)
  • 在JavaScript中的栈数据结构(Stack )

    JavaScript 中可以通过数组实现栈数据结构。栈是一种遵循后进先出(LIFO)原则的数据结构,它只允许在栈顶进行插入和删除操作。 栈是一种遵从后进先出(LIFO)原则的有序集合。新添加的或待删除的元素都保存在栈的 同一端,称作栈顶,另一端就叫栈底。在栈里,新元素都

    2024年02月10日
    浏览(38)
  • 数据结构学习记录——什么是堆(优先队列、堆的概念、最大堆最小堆、优先队列的完全二叉树表示、堆的特性、堆的抽象数据类型描述)

    目录 优先队列 若采用数组或链表实现优先队列  数组 链表 有序数组 有序链表 总结 若采用二叉搜索树来实现优先队列 最大堆 堆的概念 优先队列的完全二叉树表示 堆的两个特性  结构性 有序性 【例】最大堆和最小堆 【例】不是堆 堆的抽象数据类型描述 优先队列 (Prio

    2024年02月02日
    浏览(52)
  • 【JavaScript数据结构与算法】字符串类(反转字符串中的单词)

    个人简介 👀 个人主页: 前端杂货铺 🙋‍♂️ 学习方向: 主攻前端方向,也会涉及到服务端(Node.js) 📃 个人状态: 在校大学生一枚,已拿多个前端 offer(秋招) 🚀 未来打算: 为中国的工业软件事业效力 n 年 🥇 推荐学习:🍍前端面试宝典 🍉Vue2 🍋Vue3 🍓Vue2/3项目

    2023年04月09日
    浏览(91)
  • 【数据结构和算法】--队列的特殊结构-循环队列

    循环队列是队列的一种特殊结构,它的 长度是固定的 k ,同样是 先进先出 ,理论结构是 首尾相连的环形循环结构 。其理论结构大致如下: 具体结构描述可以参考 LeetCode : 622. 设计循环队列的题目要求,大致如下: 设计你的循环队列实现。 循环队列是一种 线性数据结构 ,

    2024年02月04日
    浏览(49)
  • 【数据结构-队列】队列介绍

    💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kuan 的首页,持续学习,不断总结,共同进步,活到老学到老 导航 檀越剑指大厂系列:全面总

    2024年02月09日
    浏览(43)
  • 【数据结构-队列】阻塞队列

    💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kuan 的首页,持续学习,不断总结,共同进步,活到老学到老 导航 檀越剑指大厂系列:全面总

    2024年02月09日
    浏览(39)
  • 数据结构01-线性结构-链表栈队列-队列篇

    本系列为C++数据结构系列,会介绍 线性结构,简单树,特殊树,简单图等。本文为线性结构部分。 线性结构 【 3 】链表:单链表、双向链表、循环链表 【 3 】栈 【 3 】队列 队列(Queue)与栈一样,是一种线性存储结构,它具有如下特点: (1)队列中的数据元素遵循“先进

    2024年02月16日
    浏览(42)
  • 数据结构—循环队列(环形队列)

    循环队列是一种线性数据结构,其操作表现基于 FIFO(先进先出)原则并且 队尾被连接在队首之后以形成一个循环 。它也被称为“ 环形缓冲器 ”。 循环队列的一个好处是可以利用这个队列之前用过的空间。在一个普通队列里,一旦一个队列满了,我们就不能插入下一个元素

    2024年02月11日
    浏览(39)
  • 【数据结构-队列】双端队列

    💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kuan 的首页,持续学习,不断总结,共同进步,活到老学到老 导航 檀越剑指大厂系列:全面总

    2024年02月09日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包