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脚本语言在网页中的简单应用
May 13 Javascript
基于jquery创建的一个图片、视频缓冲的效果样式插件
Aug 28 Javascript
Jquery ajax执行顺序 返回自定义错误信息(实例讲解)
Nov 06 Javascript
JavaScript中的值类型转换介绍
Dec 31 Javascript
js同源策略详解
May 21 Javascript
跟我学习javascript的执行上下文
Nov 18 Javascript
利用JS提交表单的几种方法和验证(必看篇)
Sep 17 Javascript
Bootstrap对话框使用实例讲解
Sep 24 Javascript
探索Vue.js component内容实现
Nov 03 Javascript
JS判断是否为JSON对象及是否存在某字段的方法(推荐)
Nov 29 Javascript
vue使用vue-i18n实现国际化的实现代码
Apr 08 Javascript
Vue数组响应式操作及高阶函数使用代码详解
Aug 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中通过ADO调用Asscess数据库和COM程序
2006/10/09 PHP
curl不使用文件存取cookie php使用curl获取cookie示例
2014/01/26 PHP
thinkphp框架实现删除和批量删除
2016/06/29 PHP
PHP接口类(interface)的定义、特点和应用示例
2020/05/18 PHP
JavaScript Sort 表格排序
2009/10/31 Javascript
基于jquery的下拉框改变动态添加和删除表格实现代码
2020/09/12 Javascript
jQuery1.6 使用方法二
2011/11/23 Javascript
JSON序列化与解析原生JS方法且IE6和chrome测试通过
2013/09/05 Javascript
jquery下拉select控件操作方法分享(jquery操作select)
2014/03/25 Javascript
javacript使用break内层跳出外层循环分析
2015/01/12 Javascript
获取select的value、text值的简单示例(jquery与javascript)
2016/12/07 Javascript
原生JS实现导航下拉菜单效果
2020/11/25 Javascript
JQuery实现图片轮播效果
2017/05/08 jQuery
bootstrap模态框示例代码分享
2017/05/17 Javascript
详解vue表单——小白速看
2018/04/08 Javascript
浅谈Vue.use的使用
2018/08/29 Javascript
vue组件中的样式属性scoped实例详解
2018/10/30 Javascript
react结合bootstrap实现评论功能
2020/05/30 Javascript
JS检测浏览器开发者工具是否打开的方法详解
2020/10/02 Javascript
vue-cli —— 如何局部修改Element样式
2020/10/22 Javascript
为什么JavaScript中0.1 + 0.2 != 0.3
2020/12/03 Javascript
基于Django模板中的数字自增(详解)
2017/09/05 Python
TensorFlow安装及jupyter notebook配置方法
2017/09/08 Python
浅谈python和C语言混编的几种方式(推荐)
2017/09/27 Python
Python设计模式之适配器模式原理与用法详解
2019/01/15 Python
Python日志logging模块功能与用法详解
2020/04/09 Python
Python使用xpath实现图片爬取
2020/09/16 Python
Python基于爬虫实现全网搜索并下载音乐
2021/02/14 Python
LivingSocial英国:英国本地优惠
2019/02/22 全球购物
九年级数学教学反思
2014/02/02 职场文书
办公室副主任职责范本
2014/03/08 职场文书
群众路线教育实践活动学习心得体会
2014/10/30 职场文书
大学生个人学习总结
2015/02/15 职场文书
施工安全协议书
2016/03/22 职场文书
学生会自荐信
2019/05/16 职场文书
pycharm无法导入lxml的解决办法
2021/03/31 Python