(四)数据结构之“队列”

140 阅读2分钟

@TOC

队列是什么?

一个先进先出的数据结构 JavaScript中没有队列,但可以用Array实现队列的所有功能 在这里插入图片描述

const queue = [];
queue.push(1);
queue.push(2);
const item1 = queue.shift();
const item2 = queue.shift();

队列的应用场景

需要先进先出的场景 比如:食堂排队打饭、JS异步中的任务队列、计算最近请求次数

场景一:食堂排队打饭

食堂只留一个窗口,学生排队打饭似春运 先进先出,保证有序 在这里插入图片描述

场景二:JS异步中的任务队列

JS是单线程,无法同时处理异步中的并发任务 使用任务队列先后处理异步任务 在这里插入图片描述

场景三:计算最近请求次数

有新请求就入队,3000ms前发出的请求出队 队列的长度就是最近请求次数 输入:inputs = [[],[1],[100],[3001],[3002]],输出:[null,1,2,3,3],分别在1,100,3001,3002时刻发出请求,这四个时刻的最近请求次数分别为1,2,3,3

LeetCode:933.最近的请求次数

解题思路 越早发出的请求越早不在最近3000ms内的请求里 满足先进先出,考虑用队列 解题步骤 有新请求就入队,3000ms前发出的请求出队 队列的长度就是最近请求次数 在这里插入图片描述 时间复杂度和空间复杂度都为O(n),时间复杂度n是需要被踢出队的请求次数,空间复杂度,对应长度,最近请求次数

前端与队列:JS异步中的任务队列

setTimeout(()=>console.log(1),0);
console.log(2)

在这里插入图片描述

技术要点

队列是一个先进先出的数据结构 JavaScript中没有队列,但可以用Array实现队列的所有功能 队列常用操作:push、shift、queue[0]

思考题

1、请用 ES6 的 class,封装一个 Queue 类,包括 push、shift、peek 方法。 2、请用队列这个数据结构结合 React 或 Vue写一个任务 App,包括添加任务和完成任务功能,要求任务只能先进先出