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 相关文章推荐
asp 取文本框名称代码
Dec 02 Javascript
采用自执行的匿名函数解决for循环使用闭包的问题
Sep 11 Javascript
JS应用正则表达式转换大小写示例
Sep 18 Javascript
浅谈jQuery中 wrap() wrapAll() 与 wrapInner()的差异
Nov 12 Javascript
JavaScript中window.showModalDialog()用法详解
Dec 18 Javascript
jQuery实现多张图片上传预览(不经过后端处理)
Apr 29 jQuery
浅谈vue的几种绑定变量的值 防止其改变的方法
Mar 01 Javascript
bing Map 在vue项目中的使用详解
Apr 09 Javascript
微信小程序使用template标签实现五星评分功能
Nov 03 Javascript
Layui表格行工具事件与数据回填方法
Sep 13 Javascript
js实现的在本地预览图片功能示例
Nov 09 Javascript
微信小程序实现滑动翻页效果(完整代码)
Dec 06 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 网页游戏开发入门教程一(webgame+design)
2009/10/26 PHP
CI框架使用composer安装的依赖包步骤与方法分析
2016/11/21 PHP
对php 判断http还是https,以及获得当前url的方法详解
2019/01/15 PHP
jquery乱码与contentType属性设置问题解决方案
2013/01/07 Javascript
jQuery的position()方法详解
2015/07/19 Javascript
分享一些常用的jQuery动画事件和动画函数
2015/11/27 Javascript
jQuery插件实现适用于移动端的地址选择器
2016/02/18 Javascript
Vue数据驱动模拟实现4
2017/01/12 Javascript
vuex的module模块用法示例
2018/11/12 Javascript
详解Vue iview IE浏览器不兼容报错(Iview Bable polyfill)
2019/01/07 Javascript
vue组件数据传递、父子组件数据获取,slot,router路由功能示例
2019/03/19 Javascript
node(koa2) web应用模块介绍详解
2019/03/29 Javascript
Nodejs 识别图片类型的方法
2019/08/15 NodeJs
es6 super关键字的理解与应用实例分析
2020/02/15 Javascript
js通过canvas生成图片缩略图
2020/10/02 Javascript
Vue+element-ui添加自定义右键菜单的方法示例
2020/12/08 Vue.js
在Apache服务器上同时运行多个Django程序的方法
2015/07/22 Python
详解python时间模块中的datetime模块
2016/01/13 Python
python实现决策树C4.5算法详解(在ID3基础上改进)
2017/05/31 Python
如何在Cloud Studio上执行Python代码?
2019/08/09 Python
Django实现文件上传下载功能
2019/10/06 Python
深入浅析Python科学计算库Scipy及安装步骤
2019/10/12 Python
基于python实现FTP文件上传与下载操作(ftp&amp;sftp协议)
2020/04/01 Python
Jupyter notebook设置背景主题,字体大小及自动补全代码的操作
2020/04/13 Python
摩飞电器俄罗斯官方网站:Morphy Richards俄罗斯
2020/07/30 全球购物
外贸业务员岗位职责
2013/11/24 职场文书
应用外语系自荐信
2014/06/26 职场文书
派出所副所长四风问题个人整改措施思想汇报
2014/10/13 职场文书
公务员党的群众路线教育实践活动学习心得体会
2014/10/30 职场文书
布达拉宫导游词
2015/02/02 职场文书
2015年安全教育月活动总结
2015/03/26 职场文书
食品卫生管理制度
2015/08/06 职场文书
python文件目录操作之os模块
2021/05/08 Python
详解PHP Swoole与TCP三次握手
2021/05/27 PHP
《乙女游戏世界对路人角色很不友好》OP主题曲无字幕动画MV公开
2022/04/05 日漫
Mysql将字符串按照指定字符分割的正确方法
2022/05/30 MySQL