JS数据结构0x003:队列

0x000 概述

这篇文章说的是队列,队列的用处也贼大,削峰、限流、消息异步化等等等

0x001 什么是队列

队列就是先入先出的数组,就和平常银行排队一样,先排队的人先处理事务,如图

clipboard.png
只有两个操作:

  • 入队:将数据放入队列
  • 出队:将数据取出并处理

0x002 初始化

js中的队列依旧可以使用数组实现

function init() {
    return []
}

0x003 入队

入队要将数据放到数组的最后,js可以用push

function enQueue(queue, data) {
    queue.push(data)
}

0x004 出队

出队要拿出第一个数据,js可以用shift

function deQueue(queue) {
    queue.shift()
}

0x005 使用

function main() {
    let queue = init()
    enQueue(queue, 1)
    enQueue(queue, 2)
    enQueue(queue, 3)
    deQueue(queue)
    deQueue(queue)
    deQueue(queue)
}

0x006 日常使用

依旧不会这么使用

let queue=[]
queue.push(1)
queue.push(2)
queue.push(3)
queue.shift()
queue.shift()
queue.shift()
queue.shift()

0x007 栗子:快速生成、缓慢

生产者每秒生成两条消息,但是消费者只消费一条消息。

  • 效果
    clipboard.png
  • 源代码
const message = []
let index = 0
setInterval(() => {
    message.push(++index)
}, 500)

setInterval(() => {
    console.log(message.shift())
}, 1000)

0x008 资源

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值