56 lines
1 KiB
JavaScript
56 lines
1 KiB
JavaScript
|
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;
|
||
|
}
|
||
|
}
|