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 相关文章推荐
基础的prototype.js常用函数及其用法
Mar 10 Javascript
JavaScript Object的extend是一个常用的功能
Dec 02 Javascript
通过Javascript创建一个选择文件的对话框代码
Jun 16 Javascript
js截取中英文字符串、标点符号无乱码示例解读
Apr 17 Javascript
js的Prototype属性解释及常用方法
May 08 Javascript
script标签属性用type还是language
Jan 21 Javascript
JS烟花背景效果实现方法
Mar 03 Javascript
适用于手机端的jQuery图片滑块动画
Dec 09 Javascript
使用cookie绕过验证码登录的实现代码
Oct 12 Javascript
简述vue路由打开一个新的窗口的方法
Nov 29 Javascript
基于Taro的微信小程序模板消息-获取formId功能模块封装实践
Jul 15 Javascript
JS+CSS实现过渡特效
Jan 02 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
php中使用gd库实现下载网页中所有图片
2015/05/12 PHP
浅谈PHP中关于foreach使用引用变量的坑
2016/11/14 PHP
Js组件的一些写法
2010/09/10 Javascript
一个简单的jQuery计算器实现了连续计算功能
2014/07/21 Javascript
JavaScript设计模式之工厂方法模式介绍
2014/12/28 Javascript
jquery easyui DataGrid简单示例
2017/01/23 Javascript
easyui-edatagrid.js实现回车键结束编辑功能的实例
2017/04/12 Javascript
全面解析vue中的数据双向绑定
2017/05/10 Javascript
使用Require.js封装原生js轮播图的实现代码
2017/06/15 Javascript
Less 安装及基本用法
2018/05/05 Javascript
vue-router 手势滑动触发返回功能
2018/09/30 Javascript
jQuery插件实现非常实用的tab栏切换功能【案例】
2019/02/18 jQuery
Vue3 中的数据侦测的实现
2019/10/09 Javascript
Vue实现星级评价效果实例详解
2019/12/30 Javascript
基于JavaScript实现猜数字游戏代码实例
2020/07/30 Javascript
浅谈vue中resetFields()使用注意事项
2020/08/12 Javascript
[34:08]2018DOTA2亚洲邀请赛3月29日 小组赛B组 VP VS EG
2018/03/30 DOTA
跟老齐学Python之??碌某?? target=
2014/09/12 Python
在PYQT5中QscrollArea(滚动条)的使用方法
2019/06/14 Python
基于Django ORM、一对一、一对多、多对多的全面讲解
2019/07/26 Python
浅谈pytorch grad_fn以及权重梯度不更新的问题
2019/08/20 Python
python实现飞行棋游戏
2020/02/05 Python
Python模拟登入的N种方式(建议收藏)
2020/05/31 Python
AmazeUI框架搭建的方法步骤(图文)
2020/08/17 HTML / CSS
英国领先的票务代理商之一:The Ticket Factory
2019/02/09 全球购物
库房主管岗位职责
2013/12/31 职场文书
人力资源主管岗位职责
2014/01/29 职场文书
党课培训主持词
2014/04/01 职场文书
软件项目开发计划书
2014/05/01 职场文书
会计专业毕业生求职信
2014/07/04 职场文书
医德医风个人工作总结2014
2014/11/14 职场文书
2015年第十五个全民国防教育日宣传活动方案
2015/05/06 职场文书
普通员工辞职信范文
2015/05/12 职场文书
如何用 Python 子进程关闭 Excel 自动化中的弹窗
2021/05/07 Python
Java方法重载和方法重写的区别到底在哪?
2021/06/11 Java/Android
详解CSS3.0(Cascading Style Sheet) 层叠级联样式表
2021/07/16 HTML / CSS