A performant queue implementation in javascript.
npm install --save @datastructures-js/queueconst { Queue } = require('@datastructures-js/queue');import { Queue } from '@datastructures-js/queue';// empty queue
const queue = new Queue();
// from an array
const queue = new Queue([1, 2, 3]);// empty queue
const queue = new Queue<number>();
// from an array
const queue = new Queue<number>([1, 2, 3]);// empty queue
const queue = Queue.fromArray([]);
// with elements
const list = [10, 3, 8, 40, 1];
const queue = Queue.fromArray(list);
// If the list should not be mutated, use a copy of it.
const queue = Queue.fromArray(list.slice());// empty queue
const queue = Queue.fromArray<number>([]);
// with elements
const list = [10, 3, 8, 40, 1];
const queue = Queue.fromArray<number>(list);adds an element to the back of the queue.
queue.enqueue(10).enqueue(20); // or queue.push(123)peeks on the front element of the queue.
console.log(queue.front()); // 10peeks on the back element in the queue.
console.log(queue.back()); // 20removes and returns the front element of the queue in O(1) runtime.
console.log(queue.dequeue()); // 10 // or queue.pop()
console.log(queue.front()); // 20Dequeuing all elements takes O(n) instead of O(n2) when using shift/unshift with arrays.
Explanation by @alexypdu:
Internally, when half the elements have been dequeued, we will resize the dynamic array using Array.slice() which runs in dequeue() is thus
benchmark:
dequeuing 1 million elements in Node v14
| Queue.dequeue | Array.shift |
| ~27 ms | ~4 mins 31 secs |
checks if the queue is empty.
console.log(queue.isEmpty()); // falsereturns the number of elements in the queue.
console.log(queue.size()); // 1creates a shallow copy of the queue.
const queue = Queue.fromArray([{ id: 2 }, { id: 4 } , { id: 8 }]);
const clone = queue.clone();
clone.dequeue();
console.log(queue.front()); // { id: 2 }
console.log(clone.front()); // { id: 4 }returns a copy of the remaining elements as an array.
queue.enqueue(4).enqueue(2);
console.log(queue.toArray()); // [20, 4, 2]clears all elements from the queue.
queue.clear();
queue.size(); // 0grunt buildThe MIT License. Full License is here
