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 synat:auto semicolon insertion)
Nov 04 Javascript
javascript css styleFloat和cssFloat
Mar 15 Javascript
让AJAX不依赖后端接口实现方案
Dec 03 Javascript
javascript表单验证 - Parsley.js使用和配置
Jan 25 Javascript
jquery显示和隐藏div特效实例
Feb 27 Javascript
jquery attr方法获取input的checked属性问题
May 26 Javascript
AngularJS页面访问时出现页面闪烁问题的解决
Mar 06 Javascript
jQuery DateTimePicker 日期和时间插件示例
Jan 22 Javascript
vue-cli项目中怎么使用mock数据
Sep 27 Javascript
vue自动化表单实例分析
May 06 Javascript
微信小程序实现tab左右切换效果
Nov 15 Javascript
利用js实现简易红绿灯
Oct 15 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 radio 单选框获取与保持值的实现代码
2010/05/15 PHP
Dojo 学习笔记入门篇 First Dojo Example
2009/11/15 Javascript
去掉gridPanel表头全选框的小例子
2013/07/18 Javascript
JQuery筛选器全系列介绍
2013/08/27 Javascript
js倒计时抢购实例
2015/12/20 Javascript
angularJs关于指令的一些冷门属性详解
2016/10/24 Javascript
jquery二级目录选中当前页的css样式
2016/12/08 Javascript
从零学习node.js之搭建http服务器(二)
2017/02/21 Javascript
React通过父组件传递类名给子组件的实现方法
2017/11/13 Javascript
vue.js中$set与数组更新方法
2018/03/08 Javascript
angularJs中json数据转换与本地存储的实例
2018/10/08 Javascript
el-select 下拉框多选实现全选的实现
2019/08/02 Javascript
JavaScript this指向相关原理及实例解析
2020/07/10 Javascript
纯js+css实现在线时钟
2020/08/18 Javascript
[42:32]完美世界DOTA2联赛循环赛 Magma vs PXG BO2第二场 10.28
2020/10/28 DOTA
Python中的tuple元组详细介绍
2015/02/02 Python
Python字典数据对象拆分的简单实现方法
2017/12/05 Python
Python使用flask框架操作sqlite3的两种方式
2018/01/31 Python
python爬取网页内容转换为PDF文件
2020/07/28 Python
详解多线程Django程序耗尽数据库连接的问题
2018/10/08 Python
学习python分支结构
2019/05/17 Python
tensorflow/core/platform/cpu_feature_guard.cc:140] Your CPU supports instructions that this T
2020/06/22 Python
HTML5在手机端实现视频全屏展示方法
2020/11/23 HTML / CSS
世界领先的在线地板和建筑材料批发商:BuildDirect
2017/02/26 全球购物
ESDlife健康生活易:身体检查预订、搜寻及比较
2019/05/10 全球购物
职业生涯规划怎么写
2013/12/29 职场文书
优质服务活动实施方案
2014/05/02 职场文书
财会专业大学生求职信
2014/09/26 职场文书
2014年学校党建工作汇报材料
2014/11/02 职场文书
三好学生评语大全
2014/12/29 职场文书
2015年秋学期师德师风建设工作总结
2015/10/23 职场文书
2016特色励志班级口号
2015/12/24 职场文书
2016年第二十届“母亲节暨幸福工程救助贫困母亲活动日”活动总结
2016/04/06 职场文书
导游词之河北滦平金山岭长城
2019/10/16 职场文书
python读取pdf格式文档的实现代码
2021/04/01 Python
Python常用配置文件ini、json、yaml读写总结
2021/07/09 Python