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


Posted in Javascript onApril 12, 2017

本文实例讲述了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 相关文章推荐
Ext面向对象开发实践(续)
Nov 18 Javascript
jquery 可拖拽的窗体控件实现代码
Mar 21 Javascript
JavaScript操作XML实例代码(获取新闻标题并分页,并分页)
May 25 Javascript
onsubmit阻止form表单提交与onclick的相关操作
Sep 03 Javascript
js中设置元素class的三种方法小结
Aug 28 Javascript
在jQuery中 常用的选择器介绍
Apr 16 Javascript
Node.js中的流(Stream)介绍
Mar 30 Javascript
JavaScript实现将数组数据添加到Select下拉框的方法
Aug 21 Javascript
基于Jquery+div+css实现弹出登录窗口(代码超简单)
Oct 27 Javascript
jQuery模拟12306城市选择框功能简单实现方法示例
Aug 13 jQuery
Koa 中的错误处理解析
Apr 09 Javascript
Flexible.js可伸缩布局实现方法详解
Nov 13 Javascript
Vue 实用分页paging实例代码
Apr 12 #Javascript
jquery 校验中国身份证号码实例详解
Apr 11 #jQuery
基于JavaScript定位当前的地理位置
Apr 11 #Javascript
js模拟支付宝密码输入框
Apr 11 #Javascript
基于jQuery实现瀑布流页面
Apr 11 #jQuery
详解angular用$sce服务来过滤HTML标签
Apr 11 #Javascript
详解AngularJs HTTP响应拦截器实现登陆、权限校验
Apr 11 #Javascript
You might like
用js自动判断浏览器分辨率的代码
2007/01/28 Javascript
封装html的select标签的js操作实例
2013/07/02 Javascript
jquery 利用show和hidden实现级联菜单示例代码
2013/08/09 Javascript
js 获取、清空input type=&quot;file&quot;的值示例代码
2014/02/19 Javascript
kindeditor修复会替换script内容的问题
2015/04/03 Javascript
JavaScript setTimeout使用闭包功能实现定时打印数值
2015/12/18 Javascript
Javascript的表单与验证-非空验证
2016/03/18 Javascript
JavaScript实现图片懒加载(Lazyload)
2016/11/28 Javascript
详解vue+vueRouter+webpack的简单实例
2017/06/17 Javascript
Vue实现购物车的全选、单选、显示商品价格代码实例
2019/05/06 Javascript
微信小程序模板消息限制实现无限制主动推送的示例代码
2019/08/27 Javascript
使用layui的router来进行传参的实现方法
2019/09/06 Javascript
vue中beforeRouteLeave实现页面回退不刷新的示例代码
2019/11/01 Javascript
vuex存储复杂参数(如对象数组等)刷新数据丢失的解决方法
2019/11/05 Javascript
关于uniApp editor微信滑动问题
2021/01/15 Javascript
Python中字典(dict)和列表(list)的排序方法实例
2014/06/16 Python
Python3读取UTF-8文件及统计文件行数的方法
2015/05/22 Python
Python操作串口的方法
2015/06/17 Python
对python中数组的del,remove,pop区别详解
2018/11/07 Python
python实现字符串加密成纯数字
2019/03/19 Python
简单了解python反射机制的一些知识
2019/07/13 Python
python的命名规则知识点总结
2019/10/04 Python
python机器学习实现决策树
2019/11/11 Python
基于Python中isfile函数和isdir函数使用详解
2019/11/29 Python
一些Solaris面试题
2015/12/22 面试题
EJB包括(SessionBean,EntityBean)说出他们的生命周期,及如何管理事务的?
2013/02/17 面试题
秘书行业自我鉴定范文
2013/12/30 职场文书
微观物理专业自荐信
2014/01/26 职场文书
预备党员自我批评思想汇报
2014/10/10 职场文书
医药公司开票员岗位职责
2015/04/15 职场文书
同事去世追悼词
2015/06/23 职场文书
茶花女读书笔记
2015/06/29 职场文书
毕业典礼致辞
2015/07/29 职场文书
Oracle数据库中通用的函数实例详解
2022/03/25 Oracle
SQL Server携程核心系统无感迁移到MySQL实战
2022/06/01 SQL Server
Nginx报错104:Connection reset by peer问题的解决及分析
2022/07/23 Servers