Queue Implementation Using Array in DSA Javascript - Time & Space Complexity
We want to understand how the time needed to add or remove items from a queue changes as the queue grows.
How does the queue's size affect the speed of its main operations?
Analyze the time complexity of the following queue operations using an array.
class Queue {
constructor() {
this.items = [];
}
enqueue(element) {
this.items.push(element);
}
dequeue() {
return this.items.shift();
}
}
This code adds items to the end and removes items from the front of an array to act like a queue.
Look at the main actions that repeat when we add or remove items.
- Primary operation: Adding with
pushand removing withshift. - How many times: Each enqueue adds once; each dequeue removes once and shifts remaining items.
Adding items is quick no matter how big the queue is, but removing items takes longer as the queue grows.
| Input Size (n) | Approx. Operations for dequeue() |
|---|---|
| 10 | 9 shifts |
| 100 | 99 shifts |
| 1000 | 999 shifts |
Pattern observation: Removing an item requires moving all other items forward, so work grows directly with queue size.
Time Complexity: O(n) for dequeue, O(1) for enqueue
This means adding is fast and steady, but removing gets slower as the queue grows.
[X] Wrong: "Both enqueue and dequeue are always fast and take the same time."
[OK] Correct: Removing from the front with shift moves all other items, so it takes longer as the queue grows.
Understanding how array-based queues work helps you explain trade-offs and choose the right data structure in real projects.
What if we used a linked list instead of an array? How would the time complexity of dequeue change?
Practice
Solution
Step 1: Understand queue behavior
A queue adds elements at the end and removes from the front, so the first element added is the first removed.Step 2: Compare with options
FIFO means First-In-First-Out, which matches queue behavior. LIFO is for stacks, random access is for arrays, and sorted order is unrelated.Final Answer:
It follows First-In-First-Out (FIFO) order -> Option CQuick Check:
Queue = FIFO [OK]
- Confusing queue with stack (LIFO)
- Thinking queue allows random access
- Assuming queue sorts elements automatically
queue in JavaScript?Solution
Step 1: Identify method to add at end
In JavaScript arrays,push()adds an element to the end of the array.Step 2: Check other methods
pop()removes from end,shift()removes from front,unshift()adds at front.Final Answer:
queue.push(x); -> Option AQuick Check:
push adds at end [OK]
- Using pop() which removes instead of adds
- Using shift() or unshift() incorrectly
- Confusing push() with unshift()
const queue = []; queue.push(10); queue.push(20); const removed = queue.shift(); queue.push(30); console.log(queue);
Solution
Step 1: Trace queue operations
Initially empty array. After push(10), queue = [10]. After push(20), queue = [10, 20].Step 2: Remove first element with shift()
shift() removes 10, so queue = [20]. Then push(30), queue = [20, 30].Final Answer:
[20, 30] -> Option BQuick Check:
After shift and push, queue = [20, 30] [OK]
- Thinking shift() removes from end
- Confusing order of elements after operations
- Assuming push adds at front
const queue = []; queue.push(1); queue.push(2); const removed = queue.pop(); console.log(queue);
Solution
Step 1: Understand queue removal operation
Queue removes elements from the front, butpop()removes from the end.Step 2: Correct removal method
Useshift()to remove the first element to maintain FIFO order.Final Answer:
pop() removes from end; use shift() to remove from front -> Option AQuick Check:
Queue removal = shift() [OK]
- Using pop() which removes last element
- Confusing push() and unshift() roles
- Thinking pop() removes front element
Solution
Step 1: Understand empty queue condition
An empty queue has length 0, so no elements to remove.Step 2: Safe removal check
Checkqueue.length === 0before callingshift()to avoid removing from empty array.Final Answer:
Check if queue.length === 0 before calling shift() -> Option DQuick Check:
Empty queue check = length === 0 [OK]
- Checking wrong index for emptiness
- Calling shift() without checking length
- Checking length > 1 instead of 0
Ready to prove it?
Pass the test and this pattern moves unknown
