diff options
Diffstat (limited to '2022/16-proboscidea-volcanium/priority_queue.js')
-rw-r--r-- | 2022/16-proboscidea-volcanium/priority_queue.js | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/2022/16-proboscidea-volcanium/priority_queue.js b/2022/16-proboscidea-volcanium/priority_queue.js new file mode 100644 index 0000000..c1a5b65 --- /dev/null +++ b/2022/16-proboscidea-volcanium/priority_queue.js @@ -0,0 +1,55 @@ +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; + } +} |