Priority Queue in JavaScript

Priority Queue in JavaScript

by shraddhapaghdar

JavaScript

class QueueElement {
	constructor(element, priority) {
		this.element = element;
		this.priority = priority;
	}
}

class PriorityQueue {
	constructor() {
		this.queueItems = [];
	}

	enqueueFunction(element, priority) {
		let queueElement = new QueueElement(element, priority);
		let contain = false;

		for (let i = 0; i < this.queueItems.length; i++) {
			if (this.queueItems[i].priority > queueElement.priority) {
				this.queueItems.splice(i, 0, queueElement);
				contain = true;
				break;
			}
		}

		/* if the input element has the highest priority push it to end of the queue */
		if (!contain) {
			this.queueItems.push(queueElement);
		}
	}
	dequeueFunction() {
		/* returns the removed element from priority queue. */
		if (this.isPriorityQueueEmpty()) {
			return "No elements present in Queue";
		}
		return this.queueItems.shift();
	}
	front() {
		/* returns the highest priority queue element without removing it. */
		if (this.isPriorityQueueEmpty()) {
			return "No elements present in Queue";
		}
		return this.queueItems[0];
	}
	rear() {
		/* returns the lowest priority queue element without removing it. */
		if (this.isPriorityQueueEmpty()) {
			return "No elements present in Queue";
		}
		return this.queueItems[this.queueItems.length - 1];
	}

	isPriorityQueueEmpty() {
		/* Checks the length of an queue */
		return this.queueItems.length === 0;
	}
	/* prints all the elements of the priority queue */
	printPriorityQueue() {
		let queueString = "";
		for (let i = 0; i < this.queueItems.length; i++)
			queueString += this.queueItems[i].element + " ";
		return queueString;
	}
}

let priorityQueue = new PriorityQueue();
console.log(priorityQueue.isPriorityQueueEmpty());
 
console.log(priorityQueue.front());
 
priorityQueue.enqueueFunction("Sonya", 2);
priorityQueue.enqueueFunction("John", 1);
priorityQueue.enqueueFunction("Alma", 1);
priorityQueue.enqueueFunction("Alexander", 2);
priorityQueue.enqueueFunction("Arthur", 3);
...