Summary
This post covers development of a Priority Queue with Typescript. The queue is implemented via a Binary Heap. Typescript features such as static type-checking and object-oriented concepts such as classes, interfaces and inheritance are utilized.Design
Implementation
Queue Item Class
export class Item {
priority:number;
value:object;
constructor(priority:number, value:object) {
this.priority = priority;
this.value = value;
}
}
Heap Interface
import {Item} from './item';
export enum Order {MIN, MAX};
export interface Heap {
insert(item:Item):void;
extract():Item;
peek():Item;
show():void;
size():number;
};
Binary Heap Class - snippets
export class BinaryHeap implements Heap {
private order:Order;
private heap:Item[];
insert(item:Item):void {
this.heap.push(item);
this.siftUp(this.heap.length-1);
};
private siftUp(idx:number):void {
let parent:number;
let sorted:boolean = false;
while (!sorted) {
parent = this.getParent(idx)
switch (this.order) {
case Order.MIN: {
if (this.heap[idx].priority < this.heap[parent].priority) {
this.swap(idx, parent);
idx = parent;
}
else {
sorted = true;
}
break;
}
case Order.MAX: {
if (this.heap[idx].priority > this.heap[parent].priority) {
this.swap(idx, parent);
idx = parent;
}
else {
sorted = true;
}
break;
}
default: {
sorted = true;
break;
}
}
}
}
Priority Queue Class
export class PriorityQueue {
heap:BinaryHeap;
constructor(items:Item[]){
this.heap = new BinaryHeap(items);
}
insert(item:Item):void {
this.heap.insert(item);
}
isEmpty():boolean {
return this.heap.size() == 0;
}
peek():Item {
return this.heap.peek();
}
pull():Item {
return this.heap.extract();
}
show():void {
this.heap.show();
}
}
Example
Source
https://github.com/joeywhelan/PriorityQueueCopyright ©1993-2024 Joey E Whelan, All rights reserved.


