首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
您找到你想要的搜索结果了吗?
是的
没有找到

JS手动实现一个栈和队列

队列 队列也是一个线性的存储结构,特点是「只能在一端添加数据,在另一端删除数据」,遵循「先进先出」的原则。...队列的时间复杂度和栈一样分是否已满,当队列未满时,入队复杂度是O(1),出队移除一个数据,剩下的数据前移,所以时间复杂度是O(n);当队列满了之后,需要扩容且移动数据,时间复杂度为O(n)。...我们还是用数组来实现一个单链队列,代码实现如下: class Queue{ constructor() { this.queue = [] } // 入队 enQueue(...getLength() { return this.queue.length - 1 } } 创建一个循环队列并操作: ?...实现一个栈,要求入栈出栈、返回最小值,且时间复杂度为O(1)。 一个数组实现两个栈。 跟队列相关的面试题: 用两个队列实现栈。 二叉树的广度优先遍历。 ...

83120

JS异步之宏队列与微队列

原理图 JS中用来存储待执行回调函数的队列包含2个不同特定的列队 宏列队:用来保存待执行的宏任务(回调),比如:定时器回调/DOM事件回调/ajax回调 微列队:用来保存待执行的微任务(回调...),比如:promise的回调/MutationObserver的回调 JS执行时会区别这2个队列 JS引擎首先必须先执行所有的初始化同步任务代码 每次准备取出第一个宏任务执行前,都要将所有的微任务一个一个取出来执行...当该宏任务执行完成,会检查其中的微任务队列,如果为空则直接执行下一个宏任务,如果不为空,则依次执行微任务,执行完成才去执行下一个宏任务。...Promise.resolve(2).then( value => { // 会立即放入微列队 console.log('Promise onResolved2()', value) } ) 依次输出...Microtask队列太长,或者执行过程中不断加入新的Microtask任务,会导致下一个Macrotask任务很久都执行不了。

84430

使用Node.js驱动Redis,实现一个消息队列

redis默认端口6379 开始写Node.js代码 下载redis这个库 yarn add redis --save 使用Node.js连接redis const redis = require('redis...'); const client = redis.createClient(6379, '127.0.0.1'); 由于是消息队列,于是需要有一个生产者、消费者 ❝这里普及下消息队列的使用,跟redis...一样,都是属于进程外的服务,就是单独要占用一个端口起服务的 ❞ 什么是消息队列?...“消息队列”是在消息的传输过程中保存消息的容器。 消息被发送到队列中。“消息队列”是在消息的传输过程中保存消息的容器。消息队列管理器在将消息从它的源中继到它的目标时充当中间人。...模拟的是在一个进程端口内,属于进程内缓存 真实的是可以通过回复ACK确认消费,独占一个端口进程,属于进程外缓存 一个简单的通过redis实现消息队列就完成了 源码地址:https://github.com

2K30

JS 数据结构 —— 队列

封装队列结构 js 中没有现成的队列结构,但我们可以基于数组自己封装一个构造函数 Queue,并实现队列的入队、出队、查看队列一个元素、检查队列是否为空和将队列内容转成字符串这 5 个队列常用操作的方法...(item) } // 出队 Queue.prototype.shift = function () { return this.items.shift() } // 查看队列一个元素...function () { return this.items.toString() } } // new 一个队列实例 const queue = new Queue() 复制代码 案例...function drinkingGame(crowd, number) { // new 一个队列实例 const queue = new Queue() // 将 crowd 里的每一项都放入队列中...(['Rng', 'T1', 'EDG', 'DWG', 'FPX'], 7) 复制代码 很遗憾,xdm,我这次预测的结果冠军是 DWG,希望是反向预测~ 优先级队列 普通队列是新插入的元素永远会被放在最后一个

53400

JS算法探险之队列(Queue)

今天,我们继续探索JS算法相关的知识点。我们来谈谈关于队列Queue的相关知识点和具体的算法。 如果,想了解其他数据结构的算法介绍,可以参考我们已经发布的文章。如下是算法系列的往期文章。...你能所学到的知识点 ❝ JS队列的各种实现 滑动窗口的概念和对应算法 利用队列解决和二叉树层树相关的算法 ❞ 文章概要 知识点简讲 滑动窗口 二叉树的广度优先搜索(BFS) 知识点简讲 队列是个啥 队列是一种遵从...JS版本的Queue 由于JS语言的特殊性,不存在真正意义上的Queue结构,一般使用数组特定的Api(push/shift)模拟最简单的queue使得能够满足「先进先出」的特性。...链表版本 这里再做一个简单说明,在js中,对象类型数据,它本身就是一个以零散方式存储的。我们来简单做一个实验。...示例:输入: root = [1,3,2,5,3,null,9] 输出: [1,3,9] ❞ 用一个队列实现二叉树的广度优先搜索 分析 找出二叉树中「每层」的最大值,在遍历的时需要知道每层什么时候开始

43920

Fabric.js 精简输出的JSON🎫

如果你还不太了解 Fabric.js 的序列化和反序列化,可以看看 Fabric.js 序列化 和 Fabric.js 反序列化。 本文要讲的 “精简JSON” 其实是 精简版序列化 。...序列化可以将 Fabric.js 的画布导出成一个 JSON 对象。 我们要把画布保存到服务器时,传输给后台的其实是一段 JSON 。...但如果你觉得 Fabric.js 默认导出的 JSON 太大、不需要那么多属性的话,可以使用一个精简版的配置。 动手编码 对比一下默认导出和精简导出。...script> 复制代码 《canvas.includeDefaultValues 文档》 将 includeDefaultValues 设置为 false 就能让 canvas.toObject() 方法输出一个精简后的...includeDefaultValues 的值默认为 true ,所以默认会输出基础版的 JSON 内容。 你可以通过修改 includeDefaultValues 的值,观察输出对象的变化。

4.4K30

【化解数据结构】详解队列,优先队列,循环队列,并实现一个队列

队列有哪些方法? 手写实现一个队列 优先队列,循环队列 LeetCode 实战 碎碎念 在上一篇文章中,我们讲了栈数据结构,它是一个线性结构,具有后进先出的特点。...打印所有元素 三、手写实现一个队列 了解了队列有哪些方法,可以来实现一个简单的队列结构 和栈这种线性结构一样,我们可以使用数组来实现一个队列 数组的一个元素看作是队头 数组的最后一位看作是队尾 1....实现 enqueue 方法 对于一个优先队列,它和普通队列最大的区别就在于它添加元素的方法 首先每一个元素都会有一个优先级 根据优先级值的大小来插入元素 对于一个最小优先队列而言,它是根据优先级值从小到大排列的...flag) this.data.push(queueElement) } } 这样一个优先队列就实现了,其他方法和普通队列一致 五、循环队列一个修改版的队列:循环队列。...for (let i = 0; i < num; i++) { queue.enqueue(queue.dequeue()) } // 输出淘汰者信息

31010

JS中的事件循环机制与宏队列、微队列笔记

作为一门浏览器脚本语言,它的主要用途就是操作DOM和与用户交互设计,如果说js是多线程的话,那么它在操作DOM的时候,一个线程对DOM进行了新增操作,另一个线程对DOM进行了删除操作,那么这个时候js的处理将会变得十分复杂...宏队列:dom事件回调、ajax回调、定时器回调 微队列:promise回调、mutation回调 因此JS执行时首先必须执行所有的初始化同步任务代码,执行完以后,每次准备取出第一个宏任务执行之前,都要将所有的微任务一个一个取出来执行...,以及两个状态为resolved的Promise对象,在then方法中写入了两个打印输出的回调,我们已经知道了宏队列和微队列的执行流程,那么我们来分析一下上面代码的执行流程。...()', 2 4.当微队列中的任务执行完开始取出宏队列中的第一个宏任务执行,也就是第一个setTimeout中的回调函数,因此将会打印'timeout callback()1' 5.因为执行完这个打印输出之后...6.现在宏队列还有一个定时器回调,微队列中又多了一个微任务,因此我们需要先执行微队列中的回调,所以将会打印输出'Promise onResolved3()', 3 7.微队列中的回调执行完毕后,再执行宏队列中的任务

1.9K30

【化解数据结构】详解队列,优先队列,循环队列,并实现一个队列

队列有哪些方法? 手写实现一个队列 优先队列,循环队列 LeetCode 实战 碎碎念 在上一篇文章中,我们讲了栈数据结构,它是一个线性结构,具有后进先出的特点。...打印所有元素 三、手写实现一个队列 了解了队列有哪些方法,可以来实现一个简单的队列结构 和栈这种线性结构一样,我们可以使用数组来实现一个队列 数组的一个元素看作是队头 数组的最后一位看作是队尾 1....实现 enqueue 方法 对于一个优先队列,它和普通队列最大的区别就在于它添加元素的方法 首先每一个元素都会有一个优先级 根据优先级值的大小来插入元素 对于一个最小优先队列而言,它是根据优先级值从小到大排列的...flag) this.data.push(queueElement) } } 这样一个优先队列就实现了,其他方法和普通队列一致 五、循环队列一个修改版的队列:循环队列。...for (let i = 0; i < num; i++) { queue.enqueue(queue.dequeue()) } // 输出淘汰者信息

27830

手写一个阻塞队列

前言 前面我们手写实现了一个单向队列一个循环队列,今天我们再手写实现一个阻塞队列。顾名思义,阻塞队列就是在普通队列的基础上加了阻塞功能。...阻塞队列 阻塞队列顾名思义就是一个具有阻塞功能的队列,当队满时,对这个队列的入队操作就要被阻塞,当队空时,对这个队列的出队操作就要被阻塞。那么阻塞队列是如何实现阻塞的呢?...每次弹出的都是队列的第一个元素,而插入的元素则会被添加到队尾,当下标到达末尾时会被设置为0。从数组的一个下标重新开始向后增长,形成一个不断的循环过程。...我们可以使用一个while循环来包裹this.wait()调用和对count的条件判断达到目的。 测试队列 如下,创建了一个大小为4的阻塞队列,然后创建四个线程,两个生产者线程,两个消费者线程。...总结 本文我们手写了一个阻塞队列队列的数据结构采用数组来实现。

75530

如何手写一个消息队列和延迟消息队列

面试题是,消息队列的使用场景有哪些?如何手动实现一个消息队列和延迟消息队列? 典型回答 消息队列的使用场景有很多,最常见的使用场景有以下几个。...没错,这个时候我们想到了使用消息队列来实现系统的解耦,每个功能的实现独立开,只需要一个订阅或者取消订阅的开关就可以了,当需要增加功能时,只需要打开订阅“用户信息完善”的队列就行,如果过两天不用了,再把订阅的开关关掉就行了...才能解决我们日常工作中遇到的问题,而消息队列的具体实现,只需要掌握一个消息中间件的使用即可,因为消息队列中间件的核心实现思路是一致的,不但如此,消息队列中间件的使用也大致类似,只要掌握了一个就能触类旁通的用好其他消息中间件...相关的面试题,还有以下这两个: 介绍一个你熟悉的消息中间件? 如何手动实现消息队列?...RabbitMQ 是一个老牌开源的消息中间件,它实现了标准的 AMQP(Advanced Message Queuing Protocol,高级消息队列协议)消息中间件,使用 Erlang 语言开发,支持集群部署

15310

从SUMO的输出文件中获得队列转移矩阵

本次我们利用SUMO的dump仿真输出文件来获取一个队列转移矩阵(lane change rate matrix)。这一矩阵在优化中有着很重要的地位。...在sumo,tools文件夹下面的xml子文件夹,里面有一个xml2csv.py的python程序,可以在命令行中运行它。 就像这样就可以了。 如果dump文件比较大,需要等等待一些时间。...最后,生成lc.csv文件用于计算队列转移矩阵的值,lane.csv文件用于形成矩阵的行列坐标。。当然啦,这里我们只是生成了两个csv文件,而没有直接生成矩阵。...原因是转移矩阵要求在excel中展现,而且之前有写过vba程序,所以这里python只是做一个数据清洗,毕竟几百万条的记录,直接用excel处理,电脑就挂了。...Cells(c.Row, f.Column).Value + 1 / cntSum End If End If Next cnt End Sub 最后就是一个这样子的转移矩阵

1.9K30
领券