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 相关文章推荐
基于javascipt-dom编程 table对象的使用
Apr 22 Javascript
js浮动图片的动态效果
Jul 10 Javascript
基于jQuery+JSON的省市二三级联动效果
Jun 05 Javascript
js实现继承的5种方式
Dec 01 Javascript
Javascript实现base64的加密解密方法示例
Jun 27 Javascript
JS中的Replace()传入函数时的用法详解
Sep 11 Javascript
js仿微信抢红包功能
Sep 25 Javascript
微信小程序实现省市区三级地址选择
Jun 21 Javascript
ES6 class的应用实例分析
Jun 27 Javascript
el-select 下拉框多选实现全选的实现
Aug 02 Javascript
浅谈Vue组件单元测试究竟测试什么
Feb 05 Javascript
解决vue组件没显示,没起作用,没报错,但该显示的组件没显示问题
Sep 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
用libtemplate实现静态网页生成
2006/10/09 PHP
WordPress判断用户是否登录的代码
2011/03/17 PHP
不支持fsockopen但支持culr环境下下ucenter与modoer通讯问题
2011/08/12 PHP
php 计划任务 检测用户连接状态
2012/03/29 PHP
phpExcel导出大量数据出现内存溢出错误的解决方法
2013/02/28 PHP
Symfony2在Nginx下的配置方法图文教程
2016/02/04 PHP
简单介绍PHP非阻塞模式
2016/03/03 PHP
php运行报错Call to undefined function curl_init()的最新解决方法
2016/11/20 PHP
Zend Framework框架中实现Ajax的方法示例
2017/06/27 PHP
PHP的JSON封装、转变及输出操作示例
2019/09/27 PHP
Ucren Virtual Desktop V2.0
2006/11/07 Javascript
javaScript Array(数组)相关方法简述
2009/07/25 Javascript
JavaScript中SQL语句的应用实现
2010/05/04 Javascript
jquery 多行滚动代码(附详细解释)
2010/06/17 Javascript
通过复制Table生成word和excel的javascript代码
2014/01/20 Javascript
jQuery操作JSON的CRUD用法实例
2015/02/25 Javascript
Spring MVC中Ajax实现二级联动的简单实例
2016/07/06 Javascript
js实现五星评价功能
2017/03/08 Javascript
angularJS之$http:与服务器交互示例
2017/03/17 Javascript
JS实现两周内自动登录功能
2017/03/23 Javascript
js时间查询插件使用详解
2017/04/07 Javascript
对Vue table 动态表格td可编辑的方法详解
2018/08/28 Javascript
vue 弹框产生的滚动穿透问题的解决
2018/09/21 Javascript
说说Vuex的getters属性的具体用法
2019/04/15 Javascript
vue实现移动端H5数字键盘组件使用详解
2020/08/25 Javascript
在vue中动态修改css其中一个属性值操作
2020/12/07 Vue.js
[40:13]Ti4 冒泡赛第二天 iG vs NEWBEE 2
2014/07/15 DOTA
python 文件查找及内容匹配方法
2018/10/25 Python
华为校园招聘上机笔试题 扑克牌大小(python)
2020/04/22 Python
PyTorch中反卷积的用法详解
2019/12/30 Python
python操作ini类型配置文件的实例教程
2020/10/30 Python
Shopee马来西亚:随拍即卖,最佳行动电商拍卖平台
2017/06/05 全球购物
美国流行背包品牌:JanSport(杰斯伯)
2018/03/02 全球购物
大学生实习感言
2014/01/16 职场文书
挂靠协议书范本
2014/04/22 职场文书
Java 在生活中的 10 大应用
2021/11/02 Java/Android