JavaScript队列的应用实例详解【经典数据结构】

作者:布瑞泽的童话 时间:2024-04-16 09:53:13 

本文实例讲述了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,队列,数据结构
0
投稿

猜你喜欢

  • Java正则表达式循环匹配字符串方式

    2023-07-25 03:29:48
  • Python定时任务框架APScheduler原理及常用代码

    2021-02-17 23:28:10
  • Python查看微信撤回消息代码

    2023-06-12 04:13:44
  • Scrapy使用的基本流程与实例讲解

    2022-08-15 17:51:19
  • 解决Python内层for循环如何break出外层的循环的问题

    2023-09-07 22:21:39
  • python如何将两张图片生成为全景图片

    2021-08-03 23:42:26
  • ASP在线升级类文件源码

    2008-10-10 13:09:00
  • 利用Python演示数型数据结构的教程

    2022-04-29 07:05:40
  • python异常处理和日志处理方式

    2023-04-25 09:36:54
  • Go语言基础学习教程

    2024-02-06 07:12:11
  • vscode使用markdown无法预览网络图片的解决方法

    2023-09-01 17:46:36
  • “)”引起PNG透明滤镜失效

    2008-08-11 13:10:00
  • Django1.7+JQuery+Ajax验证用户注册集成小例子

    2024-04-25 13:16:09
  • layer弹窗插件操作方法详解

    2023-08-09 14:30:14
  • 关于Pycharm安装第三方库超时 Read time-out的问题

    2022-03-08 10:12:43
  • Python的Scrapy爬虫框架简单学习笔记

    2023-09-25 06:41:44
  • IE与Firefox的CSS兼容大全

    2008-01-31 15:36:00
  • django的聚合函数和aggregate、annotate方法使用详解

    2023-06-27 16:07:46
  • asp最简单的生成验证码代码

    2011-03-07 11:05:00
  • 如何使用Python程序完成描述性统计分析需求

    2021-01-11 22:11:20
  • asp之家 网络编程 m.aspxhome.com