Bird
Raised Fist0
DSA Javascriptprogramming

Stack Implementation Using Array in DSA Javascript

Choose your learning style10 modes available
Mental Model
A stack is a collection where you add and remove items only from the top, like a stack of plates.
Analogy: Imagine a stack of plates in your kitchen: you put a new plate on top and take the top plate off when you need one.
Top -> [ ] ← Bottom
(empty stack)
Dry Run Walkthrough
Input: Start with empty stack, push 1, push 2, pop once
Goal: Show how items are added and removed from the top of the stack
Step 1: push 1 onto stack
Top -> [1] ← Bottom
Why: We add the first item to the empty stack
Step 2: push 2 onto stack
Top -> [2, 1] ← Bottom
Why: New item goes on top, above the previous one
Step 3: pop top item from stack
Top -> [1] ← Bottom
Why: Remove the top item, revealing the one below
Result:
Top -> [1] ← Bottom
Returned value: 2
Annotated Code
DSA Javascript
class Stack {
  constructor() {
    this.items = [];
  }

  push(element) {
    // add element to the top of the stack
    this.items.push(element);
  }

  pop() {
    // remove and return the top element
    if (this.isEmpty()) {
      return null; // stack empty
    }
    return this.items.pop();
  }

  peek() {
    // return top element without removing
    if (this.isEmpty()) {
      return null;
    }
    return this.items[this.items.length - 1];
  }

  isEmpty() {
    // check if stack is empty
    return this.items.length === 0;
  }

  print() {
    // print stack from top to bottom
    let result = '';
    for (let i = this.items.length - 1; i >= 0; i--) {
      result += this.items[i] + (i === 0 ? '' : ' -> ');
    }
    console.log(result || 'empty stack');
  }
}

// Driver code
const stack = new Stack();
stack.push(1);
stack.push(2);
stack.print();
const popped = stack.pop();
console.log('Popped:', popped);
stack.print();
this.items.push(element);
add element to the top of the stack
if (this.isEmpty()) { return null; }
check if stack is empty before popping
return this.items.pop();
remove and return the top element
for (let i = this.items.length - 1; i >= 0; i--) {
iterate from top to bottom to print stack
OutputSuccess
2 -> 1 Popped: 2 1
Complexity Analysis
Time: O(1) for push and pop because adding/removing from the end of array is constant time
Space: O(n) because we store all elements in the array
vs Alternative: Compared to linked list stack, array stack is simpler and faster for push/pop but fixed size arrays need resizing
Edge Cases
pop from empty stack
returns null safely without error
DSA Javascript
if (this.isEmpty()) { return null; }
peek on empty stack
returns null safely without error
DSA Javascript
if (this.isEmpty()) { return null; }
When to Use This Pattern
When you need last-in-first-out order and fast add/remove from one end, use stack implemented with array for simplicity and speed.
Common Mistakes
Mistake: Trying to pop from empty stack without checking causes error
Fix: Always check if stack is empty before popping
Mistake: Printing stack from bottom to top confuses order
Fix: Print from top (end of array) to bottom (start) to show correct order
Summary
A stack stores items where only the last added can be removed first.
Use it when you want to reverse order or track recent items easily.
Remember: push adds on top, pop removes from top, like a stack of plates.

Practice

(1/5)
1. What is the main characteristic of a stack data structure implemented using an array?
easy
A. Sorted Order
B. Last In, First Out (LIFO)
C. Random Access
D. First In, First Out (FIFO)

Solution

  1. Step 1: Understand stack behavior

    A stack adds and removes elements from the same end, so the last element added is the first to be removed.
  2. Step 2: Identify the correct term

    This behavior is called Last In, First Out (LIFO).
  3. Final Answer:

    Last In, First Out (LIFO) -> Option B
  4. Quick Check:

    Stack = LIFO [OK]
Hint: Stack always removes the last added item first [OK]
Common Mistakes:
  • Confusing stack with queue (FIFO)
  • Thinking stack allows random access
  • Assuming stack keeps elements sorted
2. Which of the following is the correct way to add an element to a stack implemented as an array in JavaScript?
easy
A. stack.push(element);
B. stack.pop(element);
C. stack.shift(element);
D. stack.unshift(element);

Solution

  1. Step 1: Identify method to add element at the end

    In JavaScript arrays, push() adds an element to the end of the array.
  2. Step 2: Confirm stack push operation

    Stack push means adding element on top, which corresponds to array's end, so push() is correct.
  3. Final Answer:

    stack.push(element); -> Option A
  4. Quick Check:

    Use push() to add element to stack [OK]
Hint: Use push() to add on top of stack [OK]
Common Mistakes:
  • Using pop() which removes element
  • Using shift() or unshift() which affect start of array
3. What will be the output of the following code?
const stack = [];
stack.push(10);
stack.push(20);
stack.pop();
stack.push(30);
console.log(stack);
medium
A. [10, 20, 30]
B. [30]
C. [20, 30]
D. [10, 30]

Solution

  1. Step 1: Trace push and pop operations

    Initially stack = [] push(10) -> [10] push(20) -> [10, 20] pop() removes last element 20 -> [10] push(30) -> [10, 30]
  2. Step 2: Check final stack state

    After all operations, stack contains [10, 30].
  3. Final Answer:

    [10, 30] -> Option D
  4. Quick Check:

    Push and pop update stack correctly [OK]
Hint: Pop removes last pushed, push adds at end [OK]
Common Mistakes:
  • Assuming pop removes first element
  • Confusing order of elements after pop
4. Identify the error in the following stack implementation code and select the correct fix:
class Stack {
  constructor() {
    this.items = [];
  }
  push(element) {
    this.items.unshift(element);
  }
  pop() {
    return this.items.pop();
  }
}
medium
A. Use push() instead of unshift() in push method
B. Use shift() instead of pop() in pop method
C. No error, code is correct
D. Use pop() instead of push() in push method

Solution

  1. Step 1: Analyze push method

    push uses unshift which adds element at start of array.
  2. Step 2: Analyze pop method

    pop removes element from end of array. This causes mismatch because push adds at start but pop removes from end.
  3. Step 3: Fix mismatch

    To maintain stack behavior, push should add at end using push(), so pop removes last added element correctly.
  4. Final Answer:

    Use push() instead of unshift() in push method -> Option A
  5. Quick Check:

    push() and pop() must match ends [OK]
Hint: Push and pop must operate on same array end [OK]
Common Mistakes:
  • Mixing unshift with pop causes wrong stack order
  • Thinking shift() and pop() are interchangeable
  • Ignoring array end consistency
5. You want to implement a stack using an array that also tracks the maximum element at any time efficiently. Which approach is best?
hard
A. Scan entire array to find max after each pop
B. Sort the array after each push to find max
C. Use two stacks: one for elements, one for max values
D. Store max element only in a variable updated on push

Solution

  1. Step 1: Understand max tracking challenge

    Finding max after each operation must be efficient, not scanning entire array.
  2. Step 2: Evaluate options

    Sorting after each push is costly. Scanning array after pop is slow. Storing max in variable fails if max is popped.
  3. Step 3: Use two stacks approach

    One stack stores elements, second stack stores current max at each push. This allows O(1) max retrieval.
  4. Final Answer:

    Use two stacks: one for elements, one for max values -> Option C
  5. Quick Check:

    Two stacks track max efficiently [OK]
Hint: Use auxiliary stack to track max values [OK]
Common Mistakes:
  • Sorting array each time is inefficient
  • Single variable max fails when max is popped
  • Scanning array after pop is slow
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard