JavaScript 数据结构与算法(五)优先队列
场景
生活中类似优先队列的场景:
- 优先排队的人,优先处理。 (买票、结账、WC)。
- 排队中,有紧急情况(特殊情况)的人可优先处理。
优先队列
优先级队列主要考虑的问题:
- 每个元素不再只是一个数据,还包含优先级。
- 在添加元素过程中,根据优先级放入到正确位置。
优先队列的实现
代码实现
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79
| class QueueElement { constructor(element, priority) { this.element = element; this.priority = priority; } }
export class PriorityQueue extends Queue { constructor() { super(); }
enqueue(element, priority) { const queueElement = new QueueElement(element, priority);
if (this.isEmpty()) { this.items.push(queueElement); } else { let added = false;
for (let i = 0; i < this.items.length; i++) { if (queueElement.priority < this.items[i].priority) { this.items.splice(i, 0, queueElement); added = true; break; } }
if (!added) { this.items.push(queueElement); } } }
dequeue() { return super.dequeue(); }
front() { return super.front(); }
isEmpty() { return super.isEmpty(); }
size() { return super.size(); }
toString() { let result = ""; for (let item of this.items) { result += item.element + "-" + item.priority + " "; } return result; } }
|
测试代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
| const priorityQueue = new PriorityQueue();
priorityQueue.enqueue("A", 10); priorityQueue.enqueue("B", 15); priorityQueue.enqueue("C", 11); priorityQueue.enqueue("D", 20); priorityQueue.enqueue("E", 18); console.log(priorityQueue.items);
priorityQueue.dequeue(); priorityQueue.dequeue(); console.log(priorityQueue.items);
console.log(priorityQueue.isEmpty());
console.log(priorityQueue.size());
console.log(priorityQueue.toString());
|
数组、栈和队列图解
![image]()
-
Post title: JavaScript 数据结构与算法(五)优先队列
-
Post author: XPoet
-
Create time: 2020-07-22 17:02:00
-
Post link: 2020/07/JavaScript数据结构与算法(五)优先队列/
-
Copyright notice: All articles in this blog are licensed under BY-NC-SA unless stating additionally.