Skip to content

Latest commit

 

History

History
158 lines (105 loc) · 3.04 KB

File metadata and controls

158 lines (105 loc) · 3.04 KB

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]