Bird
Raised Fist0
DSA Cprogramming~5 mins

Stack Implementation Using Array in DSA C - Time & Space Complexity

Choose your learning style10 modes available
Time Complexity: Stack Implementation Using Array
O(1)
Understanding Time Complexity

We want to understand how fast stack operations run when using an array.

Specifically, how does the time to push or pop items change as the stack grows?

Scenario Under Consideration

Analyze the time complexity of the following code snippet.


#define MAX 100
int stack[MAX];
int top = -1;

void push(int x) {
  if (top == MAX - 1) return; // stack full
  stack[++top] = x;
}

int pop() {
  if (top == -1) return -1; // stack empty
  return stack[top--];
}
    

This code shows how to add (push) and remove (pop) items from a stack using an array.

Identify Repeating Operations

Identify the loops, recursion, array traversals that repeat.

  • Primary operation: Single assignment or retrieval in array for push and pop.
  • How many times: Each push or pop does this once, no loops involved.
How Execution Grows With Input

Each push or pop does a fixed number of steps regardless of stack size.

Input Size (n)Approx. Operations
101 operation per push or pop
1001 operation per push or pop
10001 operation per push or pop

Pattern observation: The time does not increase as the stack grows; it stays constant.

Final Time Complexity

Time Complexity: O(1)

This means each push or pop takes the same short time no matter how many items are in the stack.

Common Mistake

[X] Wrong: "Push or pop takes longer as the stack gets bigger because the array is bigger."

[OK] Correct: The code accesses only one position in the array each time, so the size does not affect the time.

Interview Connect

Knowing that stack operations are very fast and constant time helps you explain why stacks are useful in many programs.

Self-Check

"What if we used a linked list instead of an array for the stack? How would the time complexity change?"

Practice

(1/5)
1. What is the main purpose of using an array in stack implementation?
easy
A. To store elements in a fixed-size linear structure
B. To allow random access to elements anywhere in the stack
C. To automatically resize the stack when full
D. To sort elements in ascending order

Solution

  1. Step 1: Understand stack storage

    A stack stores elements in a linear order where the last added element is accessed first.
  2. Step 2: Role of array in stack

    An array provides a fixed-size linear structure to hold stack elements in order.
  3. Final Answer:

    To store elements in a fixed-size linear structure -> Option A
  4. Quick Check:

    Array = fixed-size linear storage [OK]
Hint: Stack uses array for fixed-size linear storage [OK]
Common Mistakes:
  • Thinking array allows automatic resizing
  • Confusing stack with random access structures
  • Assuming array sorts elements automatically
2. Which of the following is the correct way to declare a stack array of size 5 in C?
easy
A. int[5] stack;
B. int stack[5];
C. stack int[5];
D. array stack = int[5];

Solution

  1. Step 1: Recall C array declaration syntax

    In C, arrays are declared as: type name[size];
  2. Step 2: Match syntax with options

    int stack[5]; matches correct syntax: int stack[5];
  3. Final Answer:

    int stack[5]; -> Option B
  4. Quick Check:

    C array declaration = int stack[5]; [OK]
Hint: C arrays declared as type name[size]; [OK]
Common Mistakes:
  • Placing type after variable name
  • Using incorrect keywords like 'array'
  • Misplacing brackets in declaration
3. What will be the output after executing the following code?
int stack[3];
int top = -1;
// Push 10
stack[++top] = 10;
// Push 20
stack[++top] = 20;
// Pop
int x = stack[top--];
printf("%d", stack[top]);
medium
A. Runtime error
B. 20
C. 10
D. Garbage value

Solution

  1. Step 1: Trace push operations

    Initially top = -1.
    Push 10: top becomes 0, stack[0] = 10.
    Push 20: top becomes 1, stack[1] = 20.
  2. Step 2: Trace pop and print

    Pop: x = stack[1] = 20, then top becomes 0.
    Print stack[top] = stack[0] = 10.
  3. Final Answer:

    10 -> Option C
  4. Quick Check:

    After pop, top points to 10 [OK]
Hint: Pop decreases top, print uses updated top [OK]
Common Mistakes:
  • Printing popped element instead of current top
  • Confusing pre-increment and post-decrement
  • Assuming top points beyond last element
4. Identify the error in this stack push function and select the fix:
void push(int stack[], int *top, int size, int value) {
    if (*top == size) {
        printf("Stack Overflow\n");
        return;
    }
    stack[++(*top)] = value;
}
medium
A. No error, code is correct
B. Change condition to *top == size + 1
C. Change stack[++(*top)] to stack[(*top)++]
D. Change condition to *top == size - 1

Solution

  1. Step 1: Understand top indexing in stack

    Top starts at -1, max index is size - 1.
    When top == size - 1, stack is full.
  2. Step 2: Analyze overflow condition

    Condition *top == size is wrong; it should be *top == size - 1 to detect full stack.
  3. Final Answer:

    Change condition to *top == size - 1 -> Option D
  4. Quick Check:

    Overflow when top reaches size-1 [OK]
Hint: Top max index is size-1, not size [OK]
Common Mistakes:
  • Checking top == size instead of size-1
  • Misusing increment operators in array indexing
  • Ignoring zero-based indexing
5. Given a stack implemented using an array of size 4, initially empty, what will be the stack content after these operations?
push(5);
push(10);
pop();
push(15);
push(20);
pop();
push(25);

Assume top starts at -1 and push/pop update top accordingly. Choose the correct final stack content from bottom to top.
hard
A. 5 -> 15 -> 25 -> null
B. 5 -> 10 -> 15 -> 25 -> null
C. 10 -> 15 -> 25 -> null
D. 5 -> 15 -> 20 -> 25 -> null

Solution

  1. Step 1: Trace each operation step-by-step

    Start: top = -1, stack empty.
    push(5): top=0, stack[0]=5
    push(10): top=1, stack[1]=10
    pop(): removes 10, top=0
    push(15): top=1, stack[1]=15
    push(20): top=2, stack[2]=20
    pop(): removes 20, top=1
    push(25): top=2, stack[2]=25
  2. Step 2: Final stack content

    Stack from bottom (index 0) to top (index 2): 5, 15, 25
  3. Final Answer:

    5 -> 15 -> 25 -> null -> Option A
  4. Quick Check:

    Push/pop update top correctly [OK]
Hint: Track top index after each push/pop [OK]
Common Mistakes:
  • Forgetting to update top after pop
  • Assuming pop removes bottom element
  • Mixing order of elements after operations
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