class Queue { private items: number[] = []; enqueue(element: number) { this.items.push(element); } print() { console.log(this.items.join(' -> ') + ' -> null'); } } const queue = new Queue(); queue.enqueue(5); queue.enqueue(10); queue.enqueue(15); queue.print();
The enqueue operation adds elements to the end of the queue. So after adding 5, 10, and 15 in order, the queue will be 5 -> 10 -> 15 -> null.
class Queue { private items: number[] = []; enqueue(element: number) { this.items.unshift(element); } print() { console.log(this.items.join(' -> ') + ' -> null'); } } const queue = new Queue(); queue.enqueue(1); queue.enqueue(2); queue.enqueue(3); queue.print();
Using unshift adds elements to the front, so the last enqueued element appears first. The queue becomes 3 -> 2 -> 1 -> null.
class Queue { private items: number[] = []; enqueue(element: number) { this.items[this.items.length] = element; this.items.length = this.items.length - 1; } } const queue = new Queue(); queue.enqueue(7); queue.enqueue(8);
After adding an element at the end, reducing the length removes the last element, effectively undoing the enqueue. This causes the queue to remain empty.
With a tail pointer, enqueue adds a new node at the tail in constant time, so the complexity is O(1).
class Queue { private items: number[] = []; enqueue(element: number) { this.items.push(element); } dequeue() { return this.items.shift(); } print() { console.log(this.items.join(' -> ') + ' -> null'); } } const queue = new Queue(); queue.enqueue(1); queue.enqueue(2); queue.enqueue(3); queue.dequeue(); queue.enqueue(4); queue.print();
After enqueueing 1, 2, 3, the queue is 1 -> 2 -> 3 -> null. Dequeue removes 1, leaving 2 -> 3 -> null. Enqueue 4 adds at the end, resulting in 2 -> 3 -> 4 -> null.
