class Queue {
constructor() {
this.items = []
}
enqueue (element) {
this.items.push(element)
}
dequeue () {
return this.items.shift()
}
front () {
if (this.isEmpty()) return null
return this.items[0]
}
isEmpty () {
return this.items.length === 0
}
size () {
return this.items.length
}
}
class QueueElement {
constructor(element, priority) {
this.element = element
this.priority = priority
}
}
class PriorityQueue extends Queue {
enqueue (element, priority) {
const queueElement = new QueueElement(element, priority)
if (this.isEmpty()) {
this.items.push(queueElement)
} else {
let added = false
for (let i = 0; i < this.items.length; i++) {
if (this.items[i].priority > queueElement.priority) {
this.items.splice(i, 0, queueElement)
added = true
break
}
}
if (!added) {
this.items.push(queueElement)
}
}
}
}
const queue = new PriorityQueue()
queue.enqueue('aaa', 100)
queue.enqueue('bbb', 150)
queue.enqueue('ccc', 120)
queue.enqueue('ddd', 90)
queue.items.forEach(item => {
console.log(item.element, item.priority)
})
console.log(queue.items)