队列是遵循FIFO(First In First Out,先进先出,也称为先来先服务)原则的一组有序的项。队列在尾部添加新元素,并从顶部移除元素。最新添加的元素必须排在队列的末尾。
1.构造函数构建队列函数
let Queue = (function () { const items = new WeakMap(); const weak = {}; return function(){ items.set(weak, []); this. enqueue = function() { //向队列添加一个或多个元素 let arr = items.get(weak); for(let i = 0,length = arguments.length;i
2.用ES6语法实现队列函数
let Queue = (function () { const items = new WeakMap(); class Queue1 { constructor(){ items.set(this,[]); } enqueue () { //向队列添加一个或多个元素 let arr = items.get(this); for(let i = 0,length = arguments.length;i
3.优先队列
元素的添加和移除是基于优先级的。一个现实的例子就是机场登机的顺序。头等舱和商务舱乘客的优先级要高于经济舱乘客。在有些国家,老年人和孕妇(或带小孩的妇女)登机时也享有高于其他乘客的优先级。另一个现实中的例子是医院的(急诊科)候诊室。医生会优先处理病情比较严重的患者。通常,护士会鉴别分类,根据患者病情的严重程度放号。实现一个优先队列,有两种选项:设置优先级,然后在正确的位置添加元素;或者用入列操作添加元素,然后按照优先级移除它们。
let PriorityQueue = (function() { const items = new WeakMap(); const weak = {}; function QueueElement (element, priority){ this.element = element; this.priority = priority; } return function(){ items.set(weak, []); this.enqueue = function(element, priority){ let arr = items.get(weak); let queueElement = new QueueElement(element, priority); let added = false; for (let i=0; i
4.javascript 任务队列
当我们在浏览器中打开新标签时,就会创建一个任务队列。这是因为每个标签都是单线程处理所有的任务,它被称为事件循环。浏览器要负责多个任务,如渲染HTML,执行JavaScript代码,处理用户交互(用户输入、鼠标点击等),执行和处理异步请求。