summaryrefslogtreecommitdiff
path: root/nodejs/lib/priority_queue.ts
diff options
context:
space:
mode:
Diffstat (limited to 'nodejs/lib/priority_queue.ts')
-rw-r--r--nodejs/lib/priority_queue.ts36
1 files changed, 36 insertions, 0 deletions
diff --git a/nodejs/lib/priority_queue.ts b/nodejs/lib/priority_queue.ts
new file mode 100644
index 0000000..ec9e7d0
--- /dev/null
+++ b/nodejs/lib/priority_queue.ts
@@ -0,0 +1,36 @@
+class QElement {
+ element: unknown;
+ priority: number;
+ constructor(element: unknown, priority: number) {
+ this.element = element;
+ this.priority = priority;
+ }
+}
+
+export class PriorityQueue {
+ items: Array<QElement>;
+
+ constructor(elt?: unknown) {
+ this.items = [];
+ if (elt !== undefined) this.enqueue(elt, 0);
+ }
+
+ enqueue(element: unknown, priority: number): void {
+ let qElement = new QElement(element, priority);
+
+ for (let i = 0; i < this.items.length; ++i) {
+ if (this.items[i].priority > qElement.priority) {
+ this.items.splice(i, 0, qElement);
+ return;
+ }
+ }
+ this.items.push(qElement);
+ }
+ dequeue(): unknown {
+ // we would use pop to get the highest priority, shift() gives us the lowest priority
+ return this.items.shift()?.element;
+ }
+ isEmpty(): boolean {
+ return this.items.length === 0;
+ }
+}