C Exercises: Find the minimum element in a stack
11. Minimum Element in Stack Variants
Write a C program to find the minimum element in a stack.
Sample Solution:
C Code:
#include <stdio.h>
#include <stdlib.h>
#include <limits.h>
#define MAX_SIZE 100
// Arrays to maintain the main stack and the stack for tracking minimum elements
int mainStack[MAX_SIZE];
int minStack[MAX_SIZE];
int top = -1; // Top index of the main stack
int min_Top = -1; // Top index of the minimum stack
// Function to push an element onto the main stack
void push(int element) {
    if (top >= MAX_SIZE - 1) {
        printf("Stack is full\n");
        return;
    }
    // Push the element onto the main stack
    top++;
    mainStack[top] = element;
    // If the minStack is empty or the element is less than or equal to the top element in minStack,
    // push the element onto the minStack to track minimum elements
    if (min_Top == -1 || element <= minStack[min_Top]) {
        min_Top++;
        minStack[min_Top] = element;
    }
}
// Function to pop an element from the main stack
int pop() {
    if (top < 0) {
        printf("Stack is empty\n");
        return INT_MIN;
    }
    // Pop the top element from the main stack
    int element = mainStack[top];
    top--;
    // If the popped element is the top element in minStack, also pop it from minStack
    if (element == minStack[min_Top]) {
        min_Top--;
    }
    return element;
}
// Function to get the minimum element from the main stack
int getMin() {
    if (min_Top < 0) {
        printf("Stack is empty\n");
        return INT_MIN;
    }
    return minStack[min_Top];
}
// Function to print the elements of the stack
void printstack(int *stack) {
    printf("Current stack elements:\n");
    for (int i = 0; i <= top; i++) {
        printf("%d ", stack[i]);
    }
}
int main() {
    // Example usage of the stack functions
    push(9);
    push(2);
    push(4);
    push(2);
    push(4);
    printstack(mainStack);
    printf("\nMinimum element: %d\n", getMin()); 
    pop();
    pop();
    printf("\nAfter removing two elements:\n");
    printstack(mainStack);
    printf("\nMinimum element: %d\n", getMin());  
    push(1);
    printf("\nAfter adding one element:\n");
    printstack(mainStack);
    printf("\nMinimum element: %d\n", getMin());      
    return 0;
}
Output:
Current stack elements: 9 2 4 2 4 Minimum element: 2 After removing two elements: Current stack elements: 9 2 4 Minimum element: 2 After adding one element: Current stack elements: 9 2 4 1 Minimum element: 1
Flowchart:



For more Practice: Solve these Related Problems:
- Write a C program to find the second minimum element in a stack without sorting the stack.
- Write a C program to implement a stack that retrieves the minimum element in O(1) time using an auxiliary stack.
- Write a C program to remove the minimum element from a stack while preserving the order of the remaining elements.
- Write a C program to display the current minimum element in the stack after each push or pop operation.
Go to:
PREV : Reverse Stack Using Stack Ops. 
NEXT :  Maximum Element in Stack Variants.
C Programming Code Editor:
Have another way to solve this solution? Contribute your code (and comments) through Disqus.
What is the difficulty level of this exercise?
Test your Programming skills with w3resource's quiz.
