《JavaScript数据结构与算法》笔记——第4章 队列
- 队列遵循FIFO(First In First Out)原则的一组有序的项
let Queue = (function () { let item = new WeakMap(); class InnerQueue { constructor() { item.set(this, []) } /** * 向队列尾部添加一个项 * @param element */ enqueue(element) { item.get(this).push(element) } /** * 移除队列的第一项 */ dequeue() { return item.get(this).shift() } /** * 返回队列中第一项,对队列本身不做修改 * @returns {*} */ front() { return item.get(this)[0] } /** * 判断队列是否为空 * @returns {boolean} */ isEmpty() { return item.get(this).length === 0 } /** * 返回队列包含的元素个数 * @returns {*} */ size() { return item.get(this).length } } return InnerQueue })();
- 优先队列
let PriorityQueue = (function () { let item = new WeakMap(); class InnerQueue { constructor() { item.set(this, []) } /** * 根据优先级添加项(最小优先队列) * @param element * @param priority */ enqueue(element, priority = (item.get(this).length === 0 ? 1 : item.get(this)[item.get(this).length - 1].priority + 1)) { const queue = item.get(this); if (queue.length === 0) { item.get(this).push({element, priority}); return; } for (let i = 0; i < queue.length; i++) { if (priority < queue[i].priority) { item.get(this).splice(i, 0, {element, priority}); break; } else if (i === queue.length - 1) { item.get(this).push({element, priority}); break; } } } /** * 移除队列的第一项 */ dequeue() { return item.get(this).shift() } /** * 返回队列中第一项,对队列本身不做修改 * @returns {*} */ front() { return item.get(this)[0] } /** * 判断队列是否为空 * @returns {boolean} */ isEmpty() { return item.get(this).length === 0 } /** * 返回队列包含的元素个数 * @returns {*} */ size() { return item.get(this).length } print() { return JSON.stringify(item.get(this)) } } return InnerQueue })();
相关推荐
alicelmx 2020-06-16
shenwenjie 2020-09-24
xiesheng 2020-08-02
mingyunxiaohai 2020-07-28
Cypress 2020-07-08
Cypress 2020-06-28
Dyancsdn 2020-06-27
Masimaro 2020-06-21
waitwolf 2020-06-21
Jasmineyaoyao 2020-06-16
OldBowl 2020-06-16
Masimaro 2020-06-14
waitwolf 2020-06-08
nurvnurv 2020-06-05
ustbfym 2020-06-04
ziruoxiangyi 2020-06-03
范范 2020-06-03