Mnemonist

Queue


A queue is simply a list in First In First Out (FIFO) order.

This just means that inserted items will get out in their insertion order.

For more information about the Queue, you can head here.

If you know the maximum number of items your queue will need to store, you should check the CircularBuffer structure for better performance.

const Queue = require('mnemonist/queue');

Use case

A queue is really useful to perform, for instance, the breadth-first traversal of a tree:

const queue = new Queue();
queue.enqueue(tree.root);

while (queue.size) {
  const node = queue.dequeue();
  console.log('Traversed node:', node);

  node.children.forEach((child) => {
    queue.enqueue(child);
  });
}

Constructor

The Queue takes no argument.

Static #.from

Alternatively, one can build a Queue from an arbitrary JavaScript iterable likewise:

const queue = Queue.from([1, 2, 3]);

Static #.of

You can also build a Queue from an arbitrary set of arguments:

const queue = Queue.of(1, 2, 3);

Members

Methods

Mutation

Read

Iteration

#.size

Number of items in the queue.

const queue = new Queue();
queue.size
>>> 0

#.enqueue

Adds an item to the queue.

O(1)

const queue = new Queue();

queue.enqueue(1);

#.dequeue

Retrieve & remove the next item of the queue.

O(1) amortized

const queue = new Queue();

queue.enqueue(1);
queue.dequeue();
>>> 1

#.clear

Completely clears the queue.

const queue = new Queue();

queue.enqueue(1);
queue.clear();
queue.toArray();
>>> []

#.peek

Retrieves the next item of the queue.

O(1)

const queue = new Queue();

queue.enqueue(1);
queue.peek();
>>> 1

#.forEach

Iterates over the queue in FIFO order.

const queue = new Queue();

queue.enqueue(1);
queue.enqueue(2);

queue.forEach((item, index, queue) => {
  console.log(index, item);
});

#.toArray

Converts the queue into a FIFO JavaScript array.

const queue = new Queue();

queue.enqueue(1);
queue.enqueue(2);

queue.toArray();
>>> [1, 2]

#.values

Returns an iterator over the queue’s values.

const queue = Queue.from([1, 2, 3]);

const iterator = queue.values();

iterator.next().value
>>> 1

#.entries

Returns an iterator over the queue’s entries.

const queue = Queue.from([1, 2, 3]);

const iterator = queue.entries();

iterator.next().value
>>> [0, 1]

Iterable

Alternatively, you can iterate over a queue’s values using ES2015 for...of protocol:

const queue = Queue.from([1, 2, 3]);

for (const item of queue) {
  console.log(item);
}