Skip to content

nermin99/priorityqueue

Repository files navigation

A very simple and lightweight Javascript Priority Queue, based on this article.

Focused on functionality rather than performance.

Works with both ES Modules and CommonJS.

Installation

npm i @nermin99/priorityqueue

Import

import { PriorityQueue } from '@nermin99/priorityqueue'

or

const { PriorityQueue } = require('@nermin99/priorityqueue')

Basic Usage

const pq = new PriorityQueue()

pq.enqueue(1, 30)
pq.enqueue(2, 10)
pq.enqueue('x,y', 20)

pq.dequeue() // { key: 2, priority: 10 }
pq.front() // { key: 'x,y', priority: 20 }
pq.rear() // { key: 1, priority: 30 }

API Reference

.enqueue(key, priority)

Adds an element with a given key and priority to the queue.

Keys can be of any type and are compared by identity (like Map keys), so two distinct objects with the same shape count as different keys.

pq.enqueue(1, 20)
pq.enqueue('x,y', 10)

pq // [{key: 'x,y', priority: 10}, {key: 1, priority: 20}]

.dequeue()

Removes the highest priority element from the queue and returns it.

pq.enqueue(1, 20)
pq.enqueue('x,y', 10)

const element = pq.dequeue()
element // {key: 'x,y', priority: 10}

.updatePriority(key, newPriority)

Updates the priority of an existing element in the queue.

pq.enqueue(1, 20)
pq.enqueue('x,y', 10)

pq.updatePriority(1, 5)
pq // [{key: 1, priority: 5}, {key: 'x,y', priority: 10}]

.front()

Returns the highest priority element in the queue without removing it.

pq.enqueue(1, 20)
pq.enqueue('x,y', 10)

pq.front() // {key: 'x,y', priority: 10}
pq // [{key: 'x,y', priority: 10}, {key: 1, priority: 20}]

.rear()

Returns the lowest priority element in the queue without removing it.

pq.enqueue(1, 20)
pq.enqueue('x,y', 10)

pq.rear() // {key: 1, priority: 20}
pq // [{key: 'x,y', priority: 10}, {key: 1, priority: 20}]

.isEmpty()

Returns true if the queue is empty.

pq.enqueue(1, 20)
pq.dequeue()

pq.isEmpty() // true

.entries()

Returns an array of the queue key/priority-pairs ordered by priority.

pq.enqueue(1, 20)
pq.enqueue('x,y', 10)

pq.entries() // [{key: 'x,y', priority: 10}, {key: 1, priority: 20}]

.keys()

Returns an array of the queue keys ordered by priority.

pq.enqueue(1, 20)
pq.enqueue('x,y', 10)

pq.keys() // ['x,y', 1]

.priorities()

Returns an array of the queue priorities ordered by priority.

pq.enqueue(1, 20)
pq.enqueue('x,y', 10)

pq.priorities() // [10, 20]

About

A simple and lightweight JavaScript priority queue library focused on functionality.

Topics

Resources

License

Stars

0 stars

Watchers

1 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors