aboutsummaryrefslogtreecommitdiff
path: root/2022/16-proboscidea-volcanium/priority_queue.js
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--2022/16-proboscidea-volcanium/priority_queue.js55
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;
+ }
+}