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


相关推荐: PHP正则匹配日期和时间(时间戳转换)的实例代码  JavaScript模板引擎Template.js使用详解  详解Nginx + Tomcat 反向代理 负载均衡 集群 部署指南  Linux虚拟化技术教程_KVMQEMU虚拟机安装与调优  高防服务器如何保障网站安全无虞?  VIVO手机上del键无效OnKeyListener不响应的原因及解决方法  Laravel如何实现邮件验证激活账户_Laravel内置MustVerifyEmail接口配置【步骤】  如何快速使用云服务器搭建个人网站?  edge浏览器无法安装扩展 edge浏览器插件安装失败【解决方法】  Android滚轮选择时间控件使用详解  EditPlus中的正则表达式 实战(4)  如何用狗爹虚拟主机快速搭建网站?  Laravel Debugbar怎么安装_Laravel调试工具栏配置指南  打开php文件提示内存不足_怎么调整php内存限制【解决方案】  PHP怎么接收前端传的文件路径_处理文件路径参数接收方法【汇总】  文字头像制作网站推荐软件,醒图能自动配文字吗?  Laravel怎么实现模型属性的自动加密  如何构建满足综合性能需求的优质建站方案?  Laravel怎么进行数据库事务处理_Laravel DB Facade事务操作确保数据一致性  企业网站制作这些问题要关注  Edge浏览器如何截图和滚动截图_微软Edge网页捕获功能使用教程【技巧】  七夕网站制作视频,七夕大促活动怎么报名?  Android自定义控件实现温度旋转按钮效果  太平洋网站制作公司,网络用语太平洋是什么意思?  Laravel如何从数据库删除数据_Laravel destroy和delete方法区别  阿里云高弹*务器配置方案|支持分布式架构与多节点部署  Laravel如何使用查询构建器?(Query Builder高级用法)  Bootstrap CSS布局之列表  Laravel PHP版本要求一览_Laravel各版本环境要求对照  iOS中将个别页面强制横屏其他页面竖屏  Laravel的契約(Contracts)是什么_深入理解Laravel Contracts与依赖倒置  高性价比服务器租赁——企业级配置与24小时运维服务  制作电商网页,电商供应链怎么做?  Laravel怎么自定义错误页面_Laravel修改404和500页面模板  Laravel怎么多语言本地化设置_Laravel语言包翻译与Locale动态切换【手册】  Laravel如何升级到最新的版本_Laravel版本升级流程与兼容性处理  网站建设要注意的标准 促进网站用户好感度!  Python进程池调度策略_任务分发说明【指导】  详解免费开源的.NET多类型文件解压缩组件SharpZipLib(.NET组件介绍之七)  Laravel如何安装Breeze扩展包_Laravel用户注册登录功能快速实现【流程】  网站制作价目表怎么做,珍爱网婚介费用多少?  如何快速打造个性化非模板自助建站?  大学网站设计制作软件有哪些,如何将网站制作成自己app?  Bootstrap整体框架之JavaScript插件架构  Laravel如何保护应用免受CSRF攻击?(原理和示例)  Laravel怎么导出Excel文件_Laravel Excel插件使用教程  济南网站建设制作公司,室内设计网站一般都有哪些功能?  Laravel策略(Policy)如何控制权限_Laravel Gates与Policies实现用户授权  通义万相免费版怎么用_通义万相免费版使用方法详细指南【教程】  专业商城网站制作公司有哪些,pi商城官网是哪个?