什么是队列

菜园前端
• 阅读 486

原文链接:https://note.noxussj.top/?source=helloworld


什么是队列?

队列是一种遵循先进先出原则的有序集合,添加新元素的一端称为队尾,另一端称为队首。

什么是队列

实现功能

在 JavaScript 中没有队列,但是可以通过 Array 实现队列的所有功能

  • enqueue () 入队
  • dequeue () 出队
  • top () 获取队首值
  • size () 获取队列的元素个数
  • clear () 清空队列

应用场景

  • JavaScript 异步任务中的任务队列
  • 计算最近请求次数

基础案例

通过数组实现

const queue = []
queue.push(1) // 入队
queue.shift() // 出队
const top = queue[0] // 获取队首值
const size = queue.length // 获取队列的元素个数
queue.length = 0 // 清空队列

通过类模拟实现

class Queue {
    constructor() {
        this.data = {}
        this.count = 0
    }

    /**
     * 入队
     */
    enqueue(item) {
        this.data[this.count++] = item

        return item
    }

    /**
     * 出队
     */
    dequeue() {
        if (this.count > 0) {
            const item = this.data[0]

            delete this.data[0]

            this.count--

            return item
        } else {
            return -1
        }
    }

    /**
     * 获取队首值
     */
    top() {
        if (this.count > 0) {
            return this.data[0]
        } else {
            return -1
        }
    }

    /**
     * 获取队列的元素个数
     */
    size() {
        return this.count
    }

    /**
     * 清空队列
     */
    clear() {
        this.data = {}
        this.count = 0

        return {}
    }
}

const queue = new Queue()

queue.enqueue('a')
queue.enqueue('b')
点赞
收藏
评论区
推荐文章
22 22
3年前
【数据结构之队列】详细图解!在学习队列?看这一篇就够了!
提要钩玄:本文主要介绍队列的结构、基本原理及操作,涉及到两种实现:顺序队列和链队列。1.什么是队列?先举一个日常例子,排队买饭。大家按先来后到的顺序,在窗口前排队买饭,先到先得,买完之后走开,轮到下一位买,新来的人排在队尾,不能插队。可见,上面的“队”的特点是只允许从一端进入,从另一端离开。这样的一个队,放在数据结构中就是“队列”。首先,队列是一个,所以
Wesley13 Wesley13
3年前
java实现队列的详细代码
一、什么是队列结构一种线性结构,具有特殊的运算法则【只能在一端(队头)删除,在另一端(队尾)插入】。分类:1.顺序队列结构2.链式队列结构基本操作:1.入队列2.出队列  二:准备数据staticfinal intQUEUELEN15;classDATA{          String
Stella981 Stella981
3年前
Redis 发布订阅模式(7)
列表的局限前面我们说通过队列的rpush和lpop可以实现消息队列(队尾进队头出),但是消费者需要不停地调用lpop查看List中是否有等待处理的消息(比如写一个while循环)。为了减少通信的消耗,可以sleep()一段时间再消费,但是会有两个问题:1、如果生产者生产消息的速度远大于消费者消费消息的速度,List会占用大量的内存。2、
Stella981 Stella981
3年前
RokectMQ 顺序性 和分布式事务
1.顺序性是根据参数的id来使其同时投递到统一队列上。//RocketMQ通过MessageQueueSelector中实现的算法来确定消息发送到哪一个队列上//RocketMQ默认提供了两种MessageQueueSelector实现:随机/Hash//当然你可以根据业务实现自己的MessageQueueSelecto
Stella981 Stella981
3年前
C++ 优先队列priority_queue用法
头文件:include<queue操作:top访问队头empty队列是否为空size返回队列元素个数push插入元素到队尾pop弹出队头swap交换内容定义:1/2Type数据类型3Container容器类型(必须是vect
Stella981 Stella981
3年前
ConcurrentQueue队列的基本使用方式
 队列(Queue)代表了一个先进先出的对象集合。当您需要对各项进行先进先出的访问时,则使用队列。当您在列表中添加一项,称为入队,当您从列表中移除一项时,称为出队。  ConcurrentQueue<T队列是一个高效的线程安全的队列,是.NetFramework4.0,System.Collections.Concurren
Stella981 Stella981
3年前
Redis发布订阅(Pub
一、redis做消息队列1\.redis存储的list数据是双向链表实现的,可以作为队列2\.使用lpush和rpop实现入队和出队3\.每次使用lpush和rpop都要发起一次连接,性能不好4\.这是一次生产,一次消费的队列二、发布/订阅模式(publish/subscribe),也是作为消息队列1\.可以一次生产
Stella981 Stella981
3年前
Python数据结构与算法——双端队列Dequeue
!(https://oscimg.oschina.net/oscnet/fa1ed5efabdf40f390081750e73ed60e.png)点击上方蓝字关注我们双端队列Dequeue双端队列是一种有序的数据集,与队列相似,但双端队列的两端都可以作为队首
Wesley13 Wesley13
3年前
PHP优先级队列
优先级队列首先,我们要了解一下什么叫队列:队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。从定义来看,队列是无法更改顺序的线性集合。线性集合一般有几种规则:先进先出(队
菜园前端 菜园前端
1年前
什么是栈?
原文链接:栈是基础数据结构,栈是一种遵循后进先出原则的有序集合,添加新元素的一端称为栈顶,另一端称为栈底。操作栈的元素时,只能从栈顶操作(添加、移除、取值)。实现功能在JavaScript中没有栈,但是可以通过Array实现栈的所有功能push()入栈po