Bird
Raised Fist0
DSA Cprogramming~5 mins

Min Stack Design in DSA C - Cheat Sheet & Quick Revision

Choose your learning style10 modes available
Recall & Review
beginner
What is the main purpose of a Min Stack?
A Min Stack is a special stack that supports retrieving the minimum element in constant time, along with normal stack operations like push and pop.
Click to reveal answer
intermediate
How does a Min Stack keep track of the minimum element efficiently?
It uses an auxiliary stack to keep track of the minimum values at each level, so the current minimum can be retrieved in O(1) time.
Click to reveal answer
beginner
In Min Stack design, what happens when you push a new element smaller than or equal to the current minimum?
You push the new element onto the main stack and also push it onto the min stack because it becomes the new minimum.
Click to reveal answer
beginner
What is the time complexity of retrieving the minimum element from a Min Stack?
The time complexity is O(1) because the minimum element is always on top of the auxiliary min stack.
Click to reveal answer
intermediate
Why do we need to pop from both the main stack and the min stack in a Min Stack?
Because when the top element is removed from the main stack, if it is the current minimum, it must also be removed from the min stack to update the minimum correctly.
Click to reveal answer
What data structure is commonly used alongside the main stack in a Min Stack design?
AHash map for element counts
BQueue to track elements
CLinked list to store minimums
DAnother stack to track minimum values
What is the time complexity of the push operation in a Min Stack?
AO(n)
BO(log n)
CO(1)
DO(n^2)
When popping from a Min Stack, when do you pop from the min stack?
AOnly if popped element equals current minimum
BAlways pop from min stack
CNever pop from min stack
DPop from min stack if stack size is even
What does the top of the min stack represent at any time?
AThe maximum element in the stack
BThe minimum element in the stack
CThe last pushed element
DThe size of the stack
Which operation is NOT supported efficiently by a Min Stack?
AGet median
BPop
CPush
DGet minimum
Explain how a Min Stack maintains the minimum element during push and pop operations.
Think about how two stacks work together to track minimum.
You got /4 concepts.
    Describe the time complexity of push, pop, and getMin operations in a Min Stack and why.
    Focus on how auxiliary stack helps avoid scanning.
    You got /4 concepts.

      Practice

      (1/5)
      1. What is the main purpose of a Min Stack data structure?
      easy
      A. To reverse the order of elements
      B. To retrieve the minimum element in constant time
      C. To store elements in a queue fashion
      D. To sort elements in ascending order

      Solution

      1. Step 1: Understand Min Stack functionality

        A Min Stack is designed to allow retrieval of the minimum element quickly, usually in constant time.
      2. Step 2: Compare with other options

        Sorting or queue behavior is not the main goal of a Min Stack; it focuses on minimum element retrieval.
      3. Final Answer:

        To retrieve the minimum element in constant time -> Option B
      4. Quick Check:

        Min Stack = fast minimum retrieval [OK]
      Hint: Min Stack always tracks minimum element fast [OK]
      Common Mistakes:
      • Confusing Min Stack with sorting algorithms
      • Thinking it behaves like a queue
      • Assuming it reverses elements
      2. Which of the following is the correct way to declare a stack node structure for a Min Stack in C?
      easy
      A. typedef struct Node { int value; struct Node* next; int min; } Node;
      B. typedef struct Node { int value; int min; } Node;
      C. typedef struct Node { int value; struct Node* prev; } Node;
      D. typedef struct Node { int value; struct Node* next; } Node;

      Solution

      1. Step 1: Identify required fields for Min Stack node

        A Min Stack node needs to store the value, a pointer to the next node, and the minimum value at that node.
      2. Step 2: Match with options

        typedef struct Node { int value; struct Node* next; int min; } Node; includes value, next pointer, and min field, which is correct for Min Stack implementation.
      3. Final Answer:

        typedef struct Node { int value; struct Node* next; int min; } Node; -> Option A
      4. Quick Check:

        Node stores value, next, and min [OK]
      Hint: Min Stack node needs value, next pointer, and min [OK]
      Common Mistakes:
      • Omitting the min field in node
      • Using prev pointer instead of next
      • Not using struct pointer for next
      3. Consider the following C code snippet for a Min Stack push operation:
      void push(Node** top, int x) {
          Node* newNode = malloc(sizeof(Node));
          newNode->value = x;
          if (*top == NULL) {
              newNode->min = x;
          } else {
              newNode->min = (x < (*top)->min) ? x : (*top)->min;
          }
          newNode->next = *top;
          *top = newNode;
      }
      What will be the minimum value after pushing elements 3, 5, 2 in this order on an empty stack?
      medium
      A. 2
      B. 3
      C. 5
      D. Error

      Solution

      1. Step 1: Push 3 on empty stack

        Stack top is NULL, so min = 3.
      2. Step 2: Push 5

        Compare 5 with current min 3; min remains 3.
      3. Step 3: Push 2

        Compare 2 with current min 3; min updates to 2.
      4. Final Answer:

        2 -> Option A
      5. Quick Check:

        Minimum after pushes = 2 [OK]
      Hint: Min updates only if new value is smaller [OK]
      Common Mistakes:
      • Not updating min on push
      • Confusing min with last pushed value
      • Assuming min resets on each push
      4. The following C function is intended to pop an element from a Min Stack. Identify the error:
      int pop(Node** top) {
          if (*top == NULL) return -1;
          int val = (*top)->value;
          free(*top);
          *top = (*top)->next;
          return val;
      }
      medium
      A. Not checking if stack is empty
      B. Returning value before freeing node
      C. Accessing (*top)->next after freeing *top
      D. Missing return statement

      Solution

      1. Step 1: Analyze order of operations

        The code frees *top, then accesses (*top)->next, which is invalid after free.
      2. Step 2: Correct order

        Should save next pointer before freeing current node to avoid invalid access.
      3. Final Answer:

        Accessing (*top)->next after freeing *top -> Option C
      4. Quick Check:

        Free before next access causes error [OK]
      Hint: Save next pointer before freeing node [OK]
      Common Mistakes:
      • Freeing node before accessing next
      • Ignoring NULL check
      • Returning value after free without saving
      5. You want to design a Min Stack that supports push, pop, and getMin all in O(1) time using two stacks. Which approach correctly implements getMin?
      hard
      A. Use a queue to track minimum values
      B. Sort the main stack on every push to keep minimum on top
      C. Traverse the main stack on every getMin call to find minimum
      D. Maintain a second stack that stores the minimum values; push new min or duplicate current min on push

      Solution

      1. Step 1: Understand two-stack Min Stack design

        One stack stores all values; the second stack keeps track of minimums for O(1) retrieval.
      2. Step 2: Evaluate options

        Maintain a second stack that stores the minimum values; push new min or duplicate current min on push correctly describes pushing new minimum or current minimum duplicate onto second stack.
      3. Final Answer:

        Maintain a second stack that stores the minimum values; push new min or duplicate current min on push -> Option D
      4. Quick Check:

        Two stacks: one for values, one for mins [OK]
      Hint: Use second stack to track mins for O(1) getMin [OK]
      Common Mistakes:
      • Sorting stack on every push (slow)
      • Searching stack on getMin (not O(1))
      • Using queue instead of stack
      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