# priorityqueue.js [![Build Status](https://travis-ci.com/janogonzalez/priorityqueuejs.svg?branch=master)]( https://travis-ci.com/janogonzalez/priorityqueuejs) A simple priority queue data structure for Node.js. ## Installation ``` npm install priorityqueuejs ``` ## Example ```js var PriorityQueue = require('priorityqueuejs'); var queue = new PriorityQueue(function(a, b) { return a.cash - b.cash; }); queue.enq({ cash: 250, name: 'Valentina' }); queue.enq({ cash: 300, name: 'Jano' }); queue.enq({ cash: 150, name: 'Fran' }); queue.size(); // 3 queue.peek(); // { cash: 300, name: 'Jano' } queue.deq(); // { cash: 300, name: 'Jano' } queue.size(); // 2 ``` ## API ### `PriorityQueue()` Initializes a new empty `PriorityQueue` wich uses `.DEFAULT_COMPARATOR()` as the comparator function for its elements. ### `PriorityQueue(comparator)` Initializes a new empty `PriorityQueue` with uses the given `comparator(a, b)` function as the comparator for its elements. The comparator function must return a positive number when `a > b`, 0 when `a == b` and a negative number when `a < b`. ### `PriorityQueue.DEFAULT_COMPARATOR(a, b)` Compares two `Number` or `String` objects. ### `PriorityQueue#deq()` Dequeues the top element of the priority queue. Throws an `Error` when the queue is empty. ### `PriorityQueue#enq(element)` Enqueues the `element` at the priority queue and returns its new size. ### `PriorityQueue#forEach(fn)` Executes `fn` on each element. Just be careful to not modify the priorities, since the queue won't reorder itself. ### `PriorityQueue#isEmpty()` Returns whether the priority queue is empty or not. ### `PriorityQueue#peek()` Peeks at the top element of the priority queue. Throws an `Error` when the queue is empty. ### `PriorityQueue#size()` Returns the size of the priority queue. ## Testing ``` npm install npm test ``` ## Licence MIT