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 相关文章推荐
javascript面向对象之Javascript 继承
May 04 Javascript
JavaScript与Div对层定位和移动获得坐标的实现代码
Sep 08 Javascript
jQuery实现流动虚线框的方法
Jan 29 Javascript
jQuery移动web开发之页面跳转和加载外部页面的实现
Dec 04 Javascript
JavaScript中ES6字符串扩展方法
Aug 26 Javascript
Angular中使用ui router实现系统权限控制及开发遇到问题
Sep 23 Javascript
JQuery.dataTables表格插件添加跳转到指定页
Jun 09 jQuery
Vue学习笔记进阶篇之过渡状态详解
Jul 14 Javascript
详细分析jsonp的原理和实现方式
Nov 20 Javascript
在 Vue 项目中引入 tinymce 富文本编辑器的完整代码
May 04 Javascript
Vue官方推荐AJAX组件axios.js使用方法详解与API
Oct 09 Javascript
Electron 如何调用本地模块的方法
Feb 01 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程序员编程注意事项
2008/04/10 PHP
php异常:Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE  eval()'d code error
2011/05/19 PHP
获取URL文件名后缀
2013/10/24 PHP
php提取字符串中网站url地址的方法
2014/12/03 PHP
基于PHP实现的事件机制实例分析
2015/06/18 PHP
JavaScript 应用技巧集合[推荐]
2009/08/30 Javascript
JavaScript 放大镜 移动镜片效果代码
2011/05/09 Javascript
createTextRange()的使用示例含文本框选中部分文字内容
2014/02/24 Javascript
jquery禁止回车触发表单提交
2014/12/12 Javascript
javascript制作的cookie封装及使用指南
2015/01/02 Javascript
如何解决ligerUI布局时Center中的Tab高度大小
2015/11/24 Javascript
学习vue.js计算属性
2016/12/03 Javascript
详解如何提高 webpack 构建 Vue 项目的速度
2017/07/03 Javascript
jQuery基于cookie实现换肤功能实例
2017/10/14 jQuery
React-intl 实现多语言的示例代码
2017/11/03 Javascript
webuploader实现上传图片到服务器功能
2018/08/16 Javascript
Spring boot 和Vue开发中CORS跨域问题解决
2018/09/05 Javascript
JavaScript实现JSON合并操作示例【递归深度合并】
2018/09/07 Javascript
Koa日志中间件封装开发详解
2019/03/09 Javascript
vue-cli配置flexible过程详解
2019/07/04 Javascript
vue语法自动转typescript(解放双手)
2019/09/18 Javascript
JS实现的进制转换,浮点数相加,数字判断操作示例
2019/11/09 Javascript
解决Vue @submit 提交后不刷新页面问题
2020/07/18 Javascript
design vue 表格开启列排序的操作
2020/10/28 Javascript
[02:26]2016国际邀请赛8月3日开战 中国军团出征西雅图
2016/08/02 DOTA
Python在图片中插入大量文字并且自动换行
2019/01/02 Python
Python Django给admin添加Action的方法实例详解
2019/04/29 Python
python实现身份证实名认证的方法实例
2019/11/08 Python
django xadmin中form_layout添加字段显示方式
2020/03/30 Python
Python通过zookeeper实现分布式服务代码解析
2020/07/22 Python
澳大利亚窗帘商店:Curtain Wonderland
2019/12/01 全球购物
学雷锋志愿服务月活动总结
2014/03/09 职场文书
人民调解员培训方案
2014/06/05 职场文书
质量管理标语
2014/06/12 职场文书
就业意向书
2014/07/29 职场文书
2014预备党员批评与自我批评思想汇报
2014/09/20 职场文书