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 相关文章推荐
基于JQuery实现的类似购物商城的购物车
Dec 06 Javascript
基于jquery实现的一个选择中国大学的弹框 (数据、步骤、代码)
Jul 26 Javascript
js修改input的type属性问题探讨
Oct 12 Javascript
Javascript 命名空间模式
Nov 01 Javascript
JS简单实现登陆验证附效果图
Nov 19 Javascript
Javascript基于对象三大特性(封装性、继承性、多态性)
Jan 04 Javascript
JavaScript 闭包机制详解及实例代码
Oct 10 Javascript
jquery Ajax 全局调用封装实例详解
Jan 16 Javascript
一篇文章让你彻底弄懂JS的事件冒泡和事件捕获
Aug 14 Javascript
JS中图片压缩的方法小结
Nov 14 Javascript
Vue面试题及Vue知识点整理
Oct 07 Javascript
vue移动端html5页面根据屏幕适配的四种解决方法
Oct 19 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
新52大事件
2020/03/03 欧美动漫
功能强大的php分页函数
2016/07/20 PHP
PHP常用日期加减计算方法实例小结
2018/07/31 PHP
jquery实现的让超出显示范围外的导航自动固定屏幕最顶上
2011/09/22 Javascript
js中创建对象的几种方式示例介绍
2014/01/26 Javascript
Jquery中Event对象属性小结
2015/02/27 Javascript
浅谈Javascript线程及定时机制
2015/07/02 Javascript
每天一篇javascript学习小结(Function对象)
2015/11/16 Javascript
学习JavaScript设计模式(策略模式)
2015/11/26 Javascript
浅谈JavaScript的push(),pop(),concat()方法
2016/06/03 Javascript
Javascript中常用类型的格式化方法小结
2016/12/26 Javascript
AngularJS入门示例之Hello World详解
2017/01/04 Javascript
JavaScript之生成器_动力节点Java学院整理
2017/06/30 Javascript
Vue引用第三方datepicker插件无法监听datepicker输入框的值的解决
2018/01/27 Javascript
[原创]js实现保存文本框内容为本地文件兼容IE,chrome,火狐浏览器
2018/02/14 Javascript
浅谈vue的几种绑定变量的值 防止其改变的方法
2018/03/01 Javascript
快速解决vue-cli不能初始化webpack模板的问题
2018/03/20 Javascript
浅谈VUE单页应用首屏加载速度优化方案
2018/08/28 Javascript
JavaScript 复制对象与Object.assign方法无法实现深复制
2018/11/02 Javascript
vue计算属性无法监听到数组内部变化的解决方案
2019/11/06 Javascript
python判断端口是否打开的实现代码
2013/02/10 Python
浅谈Python中带_的变量或函数命名
2017/12/04 Python
python实现基于SVM手写数字识别功能
2020/05/27 Python
基于Python实现剪切板实时监控方法解析
2019/09/11 Python
Django 404、500页面全局配置知识点详解
2020/03/10 Python
Django中文件上传和文件访问微项目的方法
2020/04/27 Python
python seaborn heatmap可视化相关性矩阵实例
2020/06/03 Python
Python中实现一行拆多行和多行并一行的示例代码
2020/09/06 Python
美国电力供应商店/电气批发商:USESI
2018/10/12 全球购物
宿舍使用违章电器检讨书
2014/01/12 职场文书
军训自我鉴定
2014/01/22 职场文书
美术指导助理求职信
2014/04/20 职场文书
庆祝教师节标语
2014/10/09 职场文书
酒店优秀员工推荐信
2015/03/24 职场文书
python神经网络编程之手写数字识别
2021/05/08 Python
Java 数据结构七大排序使用分析
2022/04/02 Java/Android