【JS】数据结构之队列

news2024/11/19 13:23:31

文章目录

    • 基本概念
    • 代码实现

基本概念

  • 队列:它是一种运算受限的线性表,FIFO(先进先出)
  • 特性:它只运行表的前端进行删除操作,在表的后端进行添加操作
  • 面对无法同时处理多个请求的场景,我们通常就会使用队列,先进先出,一个一个的解决问题,保证有序。

在这里插入图片描述

JavaScript:是单线程语言,浏览器只会分配一个主线程给JS,用来执行任务,但是一次只能执行一个任务

  • 单线程:所有任务需要排队,前一个任务结束以后,才能执行下一个任务
  • 避免复杂性:比如一个线程在一个DOM上添加了内容,另一个线程又删除了这个DOM节点。
  • H5、web worker标准:它是允许JS创建多个线程,但是子线程完全受主线程控制的,而且子线程是不可以操作DOM的。

如果前一个任务耗时很长,发起一个请求,网络很慢,后面的那个任务是不是要一直等着?并不是

  • IO(输入输出)的时候,主线程不会去管IO,而是挂起处于等待中的任务,先运行排在后面的任务,等IO设备返回了结果,再回过头,把挂起的等待中任务继续执行下去。
  • 于是就有来:同步任务 和 异步任务
同步任务:
-`主线程`上排队执行的任务,只有前一个任务执行完毕以后,才能够去执行下一个任务。
异步任务:
- 不进入`主线程`,而是进入`任务队列`,只有`任务队列`通知`主线程`后,某个异步任务可以执行了,这个任务才会进入`主线程`执行。
  • 代码执行过程:
1. 所有的同步任务都在主线程执行,形成一个执行栈,同步任务执行完后立即出栈,让出主线程。
2. 主线程外,还存在一个`任务队列(Task Queue)`,只要有了异步代码,就在`任务队列`放置一个事件
3. 一旦`执行栈`所有的同步任务执行完毕以后,主线程就会去读取`任务队列`, 看任务队列有哪些对应的异步任务,结束等待状态,进入`执行栈`,开始执行。
  • 主线程执行完毕以后,从事件队列中去读取任务队列的过程,我们称之为事件循环(Event Loop)
  • 任务队列:存在两个队列,一个是宏任务队列,一个是微任务队列
  • 主线程执行顺序可以理解为:同步任务=>微任务=>宏任务
宏任务:I/O,定时器,事件绑定、ajax...
微任务:Promise.then、catch、finally,process.nextTick... 

代码实现

  • 使用JavaScript实现一个队列
class Queue {
	constructor() {
		this.items = [];
	}
	// 入列
	enqueue(ele){
		this.items.push(ele);
	}
	// 出列
	dequeue() {
		return this.items.shift();
	}
	// 查看队列前端元素
	front(){
		return this.items[0];
	}
	// 查看队列后端元素
	rear(){
		return this.items[this.items.length - 1];
	}
	// 查看队列是否为空
	isEmpty(){
		return this.items.length === 0;
	}
	// 查看队列中元素个数
	size(){
		return this.items.length;
	}
	// 清空队列
	clear(){
		this.items = []
	}
}
const queue = new Queue();
queue.enqueue(1);
queue.enqueue(2);
queue.enqueue(3);
queue.enqueue('a');
// 出列
queue.dequeue();
queue.dequeue();
console.log(queue);
  • 运行结果:

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/62759.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

HTML小游戏16 —— 消除游戏《魔法石》源码(附完整源码)

💂 网站推荐:【神级源码资源网】【摸鱼小游戏】🤟 前端学习课程:👉【28个案例趣学前端】【400个JS面试题】💅 想寻找共同学习交流、摸鱼划水的小伙伴,请点击【摸鱼学习交流群】💬 免费且实用的计…

计算机组成原理(一)计算机系统概论

目录前言计算机硬件的组成和分类冯.诺依曼结构的基本思想运算器存储器控制器程序和指令控制器的基本任务指令流和数据流适配器与I/O设备输入设备计算机软件的组成与分类计算机系统的层次结构计算机系统的性能指标软硬件逻辑的等价性前言 计算机组成原理这门课可以说是计算机专…

b2b2c o2o 多商家入驻商城 直播带货商城 电子商务

一个好的SpringCloudSpringBoot b2b2c 电子商务平台涉及哪些技术、运营方案?以下是我结合公司的产品做的总结,希望可以帮助到大家! 搜索体验小程序:海哇 1. 涉及平台 平台管理、商家端(PC端、手机端)、买…

Aqwa 带你掌握船舶与海洋工程水动力理论与工程应用

作者:高巍,仿真秀科普作者 一、写在前面 20世纪60年代欧洲北海发现了储量丰富的油气资源,随着1973年第二次石油危机的到来,欧洲国家能源自主的迫切需要推进了北海油气资源的开发进程,推动了海洋工程技术发展。 为了…

【多线程(三)】生产者和消费者模式

文章目录3.生产者和消费者模式前言3.1生产者和消费者模式概述3.2生产者和消费者案例3.3 阻塞队列基本使用3.4 阻塞队列实现等待唤醒机制总结3.生产者和消费者模式 前言 在线程世界里,生产者就是生产数据的线程,消费者就是消费数据的线程。在多线 程开发…

SQL SERVER数据库修复之REPAIR_ALLOW_DATA_LOSS级别简介和实例

目录 (一)前言 (二)关于DBCC CHECKxxx系列命令 1. DBCC CHECKALLOC 2. DBCC CHECKCATALOG 3. DBCC CHECKDB (1)基本概念 (2)基本语法 (3)参数说明 &…

分析常见限流算法及手写三种(计数器、漏斗、令牌桶)代码实现

常见的限流算法分析 限流在我们日常生活中经常见到,如火车站门口的栏杆、一些景点的门票只出售一定的数量 等等。在我们的开发中也用到了这种思想。 为什么要限流 在保证可用的情况下尽可能多增加进入的人数,其余的人在排队等待,或者返回友好提示,保证里面的进行…

机器如何快速学习数据采集

很多人都在思考如何利用机器学习(ML)算法来提高产品或服务的质量。 如果你正在考虑采用ML,以正确的格式收集正确的数据,将会降低你的数据清理工作以及数据浪费。 要收集所有数据 收集所有数据是非常重要的。除非你真正训练一个…

Excel基于分隔符拆分列

1、示例数据 id name describe 1 张三 学生 2 李四 老师 3 王五 学生 2、将数据复制到Excel中 数据目前都在A列中 3、将数据一次拆分到多个列 Excel基于分隔符拆分列,将数据一次拆分到多个列。 选中数据,数据-分列-分列 设置分隔符 点击完成后&…

【Python自然语言处理】使用逻辑回归(logistic)对电影评论情感分析实战(超详细 附源码)

需要源码和数据集请点赞关注收藏后评论区留言私信~~~ 一、舆情分析 舆情分析很多情况下涉及到用户的情感分析,或者亦称为观点挖掘,是指用自然语言处理技术、文本挖掘以及计算机语言学等方法来正确识别和提取文本素材中的主观信息,通过对带有…

使用Visual Studio Code 进行Python编程(一)

1、下载Visual Studio Code 到微软的Visual Studio Code官方主页下载Visual Studio Code: Visual Studio: 面向软件开发人员和 Teams 的 IDE 和代码编辑器Visual Studio 开发工具和服务让任何开发人员在任何平台和语言的应用开发都更加轻松。 随时随地免费使用代码编辑器或 I…

Spire.Office for .NET 7.12.0 2022年最后版本?

谷歌能找到破解版是破坏强签名,不能用web,请把大家不要用Spire.Office for .NET is a combination of Enterprise-Level Office .NET API offered by E-iceblue. It includes Spire.Doc, Spire.XLS, Spire.Spreadsheet, Spire.Presentation, Spire.PDF, …

数据库开发项目 flask + html 01

目的 开放平台(网站) 前端开发 HTML CSS JavaScript Web框架: 接受请求并处理 MySQL数据库: 存储数据 快速上手: 基于 Flask Web框架 快速搭建网站。 进阶: 基于 Django框架 1. 快速开发网站 安装框架 …

(附源码)SSM介绍信智能实现系统 毕业设计 260930

SSM介绍信智能实现系统 摘 要 科技进步的飞速发展引起人们日常生活的巨大变化,电子信息技术的飞速发展使得电子信息技术的各个领域的应用水平得到普及和应用。信息时代的到来已成为不可阻挡的时尚潮流,人类发展的历史正进入一个新时代。在现实运用中&…

java+mysql基于SSM的大学生兼职信息系统-计算机毕业设计

开发环境 运行环境: 开发工具:IDEA /Eclipse 数据库:MYSQL5.7 应用服务:Tomcat7/Tomcat8 使用框架:SSM(springspringMVCmybatis)vue 项目介绍 论文主要是对大学生兼职信息系统进行了介绍,包括研究的现状,还有涉及的开发背景,然…

分享几款免费实用的国产内网穿透工具

对于没有公网IP的用户来说,如何实现远程管理或让局域网的服务可以被公网访问到是一个问题。当然,也有很多类似的需求,比如: 微信公众号小程序开发调试公网访问本地web项目异地远程处理公司服务问题异地访问公司内网财务/管理系统…

Qt 中模型视图编程的基本概念

背景 一个应用程序本质可以抽象为三部分:界面、逻辑处理、数据。程序中存储有大量的数据,经过逻辑处理后、通过界面展示给用户,同时用户可以通过界面对数据进行编辑,如下图所示: Qt 中的模型视图架构就是用来实现大量…

Spring_第3章_AOP+事务

Spring_第3章_AOP事务 文章目录Spring_第3章_AOP事务一、AOP1 AOP简介问题导入1.1 AOP简介和作用【理解】1.2 AOP中的核心概念【理解】2 AOP入门案例【重点】问题导入2.1 AOP入门案例思路分析2.2 AOP入门案例实现【第一步】导入aop相关坐标【第二步】定义dao接口与实现类【第三…

8 常规聚类

常规聚类 聚类分析是解决数据全方位自动分组的有效方式。若将数据全体视为一个大类,这个大类很可能是由若干个包含了一定数量观测的自然小类”组成的。聚类分析的目的就是找到这些隐藏于数据中的客观存在的“自然小类”,并通过刻画“自然小类”体现数据…

舆情监控软件

随着中国互联网的快速发展,舆情监测成为工作中的一部分,如果没有舆情监控软件的及时介入,负面舆情将会迅速扩大并蔓延到各个方面,对社会以及公众造成严重的影响,舆情监控软件对企业政府有着深远影响,接下来…