JavaScript stacks and queues

A stack is last-in, first-out, and a JavaScript array already supports it: push adds to the end and pop removes from the end, both in O(1). A queue is first-in, first-out. Using push and shift works, but shift removes from the front and may move every remaining element, which is O(n) for a large array.

JavaScript
class Queue {
  constructor() {
    this.items = [];
    this.head = 0;
  }

  enqueue(value) {
    this.items.push(value);
  }

  dequeue() {
    if (this.head === this.items.length) {
      return undefined;
    }
    const value = this.items[this.head];
    this.head++;
    return value;
  }

  get size() {
    return this.items.length - this.head;
  }
}

const stack = [];
stack.push("a");
stack.push("b");
stack.push("c");
console.log(stack.pop(), stack.pop(), stack.length);

const queue = new Queue();
queue.enqueue(1);
queue.enqueue(2);
queue.enqueue(3);
console.log(queue.dequeue(), queue.dequeue(), queue.size);
console.log(queue.dequeue(), queue.dequeue());
Read the full lesson