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.