advent-of-code/2022/16-proboscidea-volcanium/priority_queue.js

56 lines
1 KiB
JavaScript
Raw Normal View History

2022-12-26 07:48:55 +01:00
export class QElement {
constructor(element, priority) {
this.element = element;
this.priority = priority;
}
}
export class PriorityQueue {
constructor() {
this.items = [];
}
enqueue(element, priority) {
var qElement = new QElement(element, priority);
var contain = false;
for (var i = 0; i < this.items.length; i++) {
if (this.items[i].priority > qElement.priority) {
this.items.splice(i, 0, qElement);
contain = true;
break;
}
}
if (!contain) {
this.items.push(qElement);
}
}
dequeue() {
if (this.isEmpty()){
throw "Attempting to dequeue an empty queue";
}
return this.items.shift();
}
front() {
if (this.isEmpty()){
throw "Attempting to front an empty queue";
}
return this.items[0];
}
rear() {
if (this.isEmpty()){
throw "Attempting to rear an empty queue";
}
return this.items[this.items.length - 1];
}
isEmpty() {
return this.items.length == 0;
}
printPQueue() {
var str = "";
for (var i = 0; i < this.items.length; i++)
str += this.items[i].element + " ";
return str;
}
}