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 相关文章推荐
使用jQuery全局事件ajaxStart为特定请求实现提示效果的代码
Dec 30 Javascript
node.js中的fs.lchmodSync方法使用说明
Dec 16 Javascript
用JS中split方法实现彩色文字背景效果实例
Aug 24 Javascript
Bootstrap表单控件使用方法详解
Jan 11 Javascript
fullCalendar中文API官方文档
Feb 07 Javascript
JS简单验证上传文件类型的方法
Apr 17 Javascript
vue生成token保存在客户端localStorage中的方法
Oct 25 Javascript
js实现unicode码字符串与utf8字节数据互转详解
Mar 21 Javascript
浅谈layer的Icon样式以及一些常用的layer窗口使用方法
Sep 11 Javascript
vue3修改link标签默认icon无效问题详解
Oct 09 Javascript
vue父子组件的通信方法(实例详解)
Nov 10 Javascript
element-ui树形控件后台返回的数据+生成组织树的工具类
Mar 05 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
PhpDocumentor 2安装以及生成API文档的方法
2014/05/21 PHP
php查找指定目录下指定大小文件的方法
2014/11/28 PHP
php实现refresh刷新页面批量导入数据的方法
2014/12/23 PHP
5款适合PHP使用的HTML编辑器推荐
2015/07/03 PHP
windows平台中配置nginx+php环境
2015/12/06 PHP
PHP设计模式之PHP迭代器模式讲解
2019/03/22 PHP
phpstorm 配置xdebug的示例代码
2019/03/31 PHP
Laravel推荐使用的十个辅助函数
2019/05/10 PHP
解决PHP curl或file_get_contents下载图片损坏或无法打开的问题
2019/10/11 PHP
Laravel 自定命令以及生成文件的例子
2019/10/23 PHP
javascript或asp实现的判断身份证号码是否正确两种验证方法
2009/11/26 Javascript
js插件设置innerHTML时在IE8下提示“未知运行时错误”解决方法
2015/04/25 Javascript
BootStrap与validator 使用笔记(JAVA SpringMVC实现)
2016/09/21 Javascript
jQuery插件FusionCharts绘制2D环饼图效果示例【附demo源码】
2017/04/10 jQuery
基于rem的移动端响应式适配方案(详解)
2017/07/07 Javascript
vue 使用eventBus实现同级组件的通讯
2018/03/02 Javascript
微信小程序首页的分类功能和搜索功能的实现思路及代码详解
2018/09/11 Javascript
Vue之beforeEach非登录不能访问的实现(代码亲测)
2019/07/18 Javascript
vue从零实现一个消息通知组件的方法详解
2020/03/16 Javascript
比较详细Python正则表达式操作指南(re使用)
2008/09/06 Python
python选择排序算法的实现代码
2013/11/21 Python
使用rpclib进行Python网络编程时的注释问题
2015/05/06 Python
对pandas中iloc,loc取数据差别及按条件取值的方法详解
2018/11/06 Python
Python GUI编程学习笔记之tkinter事件绑定操作详解
2020/03/30 Python
python3.5的包存放的具体路径
2020/08/16 Python
美国蔬菜和植物种子公司:Burpee
2017/02/01 全球购物
如何配置、使用和清除Smarty缓存
2015/12/23 面试题
int *p=NULL和*p= NULL有什么区别
2014/10/23 面试题
中国梦的演讲稿
2014/01/08 职场文书
大二法学专业职业生涯规划范文
2014/02/12 职场文书
给学校建议书范文
2014/05/13 职场文书
创建绿色学校先进个人材料
2014/08/20 职场文书
2014学习优秀共产党员先进事迹思想汇报
2014/09/14 职场文书
城南旧事观后感
2015/06/11 职场文书
乡镇团代会开幕词
2016/03/04 职场文书
Pygame如何使用精灵和碰撞检测
2021/11/17 Python