JavaScript队列的应用实例详解【经典数据结构】

发布时间 - 2026-01-11 00:37:04    点击率:

本文实例讲述了JavaScript队列的应用。分享给大家供大家参考,具体如下:

和前面介绍的栈相反,队列是一种先进先出的线性表,它只允许在表的一端进行插入,而在另一端进行删除。JavaScript自己提供了两个队列方法shiftpush方法,分别是出队入队,其原理就是将元素插入数组最后一个和删除第一个元素

这里需要注意一点,就是unshift方法的效率比push的效率要低很多。因为它要将入队之前的数组全部往前移动一位。这里我们就不用代码再次演示了。

和线性表类似,队列也分为顺序队列链队列

和顺序栈类似,在队列的顺序存储结构中,除了使用一组地址连续的存储单元依次存放从队列头到队列尾的元素之外,还要设置两个指针frontrear分别指向队列头元素队列尾元素。初始化时,front=rear=0;插入元素时,rear+1;删除元素时,front+1。所以在非空队列中,头指针始终指向队列头元素,而尾指针始终指向队列尾元素的下一个位置

队列的应用有哪些呢?

我们先看看计算机组成层面的吧,首先就是CPU资源的竞争问题。在具有多个终端的计算机系统中,有多个用户需要使用CPU来各自运行程序,操作系统会按照每个请求在时间上的顺序,加请求排成一个队列。每次把CPU分配给队头的任务,完成后使其出队,然后依次。

第二个例子就是主机与外部设备之间速度不匹配的问题。我们以打印机和主机为例。主机输出数据给打印机打印,主机输出数据的速度远大于打印机打印速度,所以有一个打印数据缓冲区,主要把数据依次写入缓冲区,写满后主机就暂停输出,继而去做其他时间,只到打印机完成打印,再次请求主机发送数据,主机才继续输出数据。这样利用队列可以提高主机的效率。

我在这里挑一个常见的软件层面的例子,也就是银行排队问题。先说说实现思路,第一个客户到达的时刻为0,之后每个客户到达的时刻在前一个客户到达时设定随机值,因此在客户到达时需要产生两个随机数,一个是客户办理业务耗时durtime,一个是下一客户到达时间间隔intertime,假设当前时间为occurtime,则下一客户到达时为occurtime+intertime。

刚到达的客户应该插入到当前含元素最少的队列中。

在JavaScript的运用中,通常使用队列来进行任务的排序。而任务队列的任务是按进入队列的顺序延迟执行(解决状态一致性)的,即当前一个任务完成后,后面的任务才被执行,如果当前没有任务,则入队列的任务立即执行。代码如下:

<!DOCTYPE html>
<html>
 <head>
  <meta charset="utf-8">
  <title>队列</title>
 </head>
 <body>
<script type="text/javascript">
 function taskQueue() {
  taskList = [];
  var isRun = false;
  this.addTask = function (task) {
  taskList.push(task);
  };
  setInterval(function () {
  if (taskList.length > 0 && !isRun) {
   isRun = true;
   taskList.shift();
   isRun = false;
  }
  }, 100);
 }
 function show(){
  alert(taskList);
 }
  taskQueue();
  addTask(1);
  addTask(2);
  addTask(3);
  setTimeout('show()',99);//1,2,3
  setTimeout('show()',101);//2,3
  setTimeout('show()',400);//null
</script>
 </body>
</html>

更多关于JavaScript相关内容感兴趣的读者可查看本站专题:《JavaScript数据结构与算法技巧总结》、《JavaScript数学运算用法总结》、《JavaScript排序算法总结》、《JavaScript遍历算法与技巧总结》、《JavaScript查找算法技巧总结》及《JavaScript错误与调试技巧总结》

希望本文所述对大家JavaScript程序设计有所帮助。


# JavaScript  # 队列  # 数据结构  # JS中的算法与数据结构之队列(Queue)实例详解  # JavaScript数据结构与算法之队列原理与用法实例详解  # JavaScript数据结构之优先队列与循环队列实例详解  # JavaScript数据结构学习之数组、栈与队列  # JavaScript数组实现数据结构中的队列与堆栈  # JavaScript数据结构与算法之栈与队列  # JavaScript中数据结构与算法(二):队列  # 基于JavaScript的数据结构队列动画实现示例解析  # 第一个  # 多个  # 下一  # 是一种  # 完成后  # 随机数  # 相关内容  # 线性表  # 遍历  # 而在  # 感兴趣  # 第二个  # 给大家  # 去做  # 使其  # 时间为  # 因为它  # 为例  # 要将 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Laravel如何自定义分页视图?(Pagination示例)  如何在阿里云通过域名搭建网站?  Midjourney怎么调整光影效果_Midjourney光影调整方法【指南】  Laravel如何发送邮件_Laravel Mailables构建与发送邮件的简明教程  如何用西部建站助手快速创建专业网站?  南京网站制作费用,南京远驱官方网站?  极客网站有哪些,DoNews、36氪、爱范儿、虎嗅、雷锋网、极客公园这些互联网媒体网站有什么差异?  Laravel如何使用Passport实现OAuth2?(完整配置步骤)  Windows Hello人脸识别突然无法使用  Laravel如何处理和验证JSON类型的数据库字段  如何利用DOS批处理实现定时关机操作详解  Python正则表达式进阶教程_复杂匹配与分组替换解析  Laravel如何实现用户注册和登录?(Auth脚手架指南)  如何在 Python 中将列表项按字母顺序编号(a.、b.、c. …)  Laravel Admin后台管理框架推荐_Laravel快速开发后台工具  Laravel中Service Container是做什么的_Laravel服务容器与依赖注入核心概念解析  如何快速生成凡客建站的专业级图册?  Swift中swift中的switch 语句  黑客如何利用漏洞与弱口令入侵网站服务器?  Laravel如何配置中间件Middleware_Laravel自定义中间件拦截请求与权限校验【步骤】  网站制作软件有哪些,制图软件有哪些?  如何在自有机房高效搭建专业网站?  猎豹浏览器开发者工具怎么打开 猎豹浏览器F12调试工具使用【前端必备】  php8.4header发送头信息失败怎么办_php8.4header函数问题解决【解答】  Laravel队列任务超时怎么办_Laravel Queue Timeout设置详解  JS经典正则表达式笔试题汇总  HTML 中动态设置元素 name 属性的正确语法详解  网页设计与网站制作内容,怎样注册网站?  JS去除重复并统计数量的实现方法  HTML5空格和nbsp有啥关系_nbsp的作用及使用场景【说明】  详解一款开源免费的.NET文档操作组件DocX(.NET组件介绍之一)  高性能网站服务器部署指南:稳定运行与安全配置优化方案  Win11怎么更改系统语言为中文_Windows11安装语言包并设为显示语言  网站制作报价单模板图片,小松挖机官方网站报价?  jquery插件bootstrapValidator表单验证详解  如何在IIS7中新建站点?详细步骤解析  浅谈redis在项目中的应用  详解ASP.NET 生成二维码实例(采用ThoughtWorks.QRCode和QrCode.Net两种方式)  如何生成腾讯云建站专用兑换码?  Laravel如何优化应用性能?(缓存和优化命令)  bing浏览器学术搜索入口_bing学术文献检索地址  利用JavaScript实现拖拽改变元素大小  成都网站制作公司哪家好,四川省职工服务网是做什么用?  如何在阿里云部署织梦网站?  Win11任务栏卡死怎么办 Windows11任务栏无反应解决方法【教程】  图片制作网站免费软件,有没有免费的网站或软件可以将图片批量转为A4大小的pdf?  Laravel如何实现API资源集合?(Resource Collection教程)  做企业网站制作流程,企业网站制作基本流程有哪些?  Laravel项目怎么部署到Linux_Laravel Nginx配置详解  Laravel如何配置Horizon来管理队列?(安装和使用)