π Stack in DSA – Introduction, Operations, Applications & Programs (Complete Beginner Guide)
Previous Blog in This Series
π Dynamic Arrays in C – malloc(), calloc(), realloc(), free() Complete Guide
Next Blog in This Series
π Queue in DSA – Introduction, Operations & Applications
π Introduction
After learning Arrays and Dynamic Memory Allocation, the next important topic in Data Structures & Algorithms (DSA) is the Stack.
A Stack is one of the most fundamental linear data structures used in programming.
It follows a special rule called:
LIFO
Last In, First Out
This means the last element inserted is the first element removed.
Real-life examples include:
Stack of plates
Browser back button
Undo/Redo operations
Function call management
Expression evaluation
Parentheses matching
Recursion handling
In this complete beginner guide, we will learn:
✔ What is Stack
✔ Why Stack is Needed
✔ LIFO Principle
✔ Basic Operations (Push, Pop, Peek, Display)
✔ Stack Representation
✔ Stack using Arrays
✔ Stack using Linked List (Brief Intro)
✔ Difference Between Stack and Queue
✔ Applications of Stack
✔ Time Complexity
✔ Common Mistakes
✔ Interview Questions
✔ FAQs
This topic is highly important for:
Placement preparation
Coding interviews
Technical viva
University exams
Advanced DSA learning
π What is Stack?
A Stack is a linear data structure where insertion and deletion happen only from one end called:
TOP
This makes stack different from arrays and linked lists.
Example:
TOP
↓
| 30 |
| 20 |
| 10 |
-----
Here:
30 is removed first
10 was inserted first but removed last
This follows:
Last In, First Out (LIFO)
π₯ Why Stack is Needed?
Without stack:
Managing function calls becomes difficult
Undo/Redo systems become complex
Expression evaluation becomes harder
Backtracking becomes inefficient
Browser history becomes difficult to manage
Stack helps in:
Controlled insertion/deletion
Efficient temporary data storage
Better recursion handling
Faster access to recently added elements
This is why stack is extremely important.
π Basic Stack Operations
There are mainly 4 important operations:
1. Push Operation
Push means inserting an element into the stack.
Example:
Push(40)
Result:
TOP
↓
| 40 |
| 30 |
| 20 |
| 10 |
-----
2. Pop Operation
Pop means removing the top element from the stack.
Example:
Pop()
30 gets removed first.
3. Peek Operation
Peek means viewing the top element without removing it.
Example:
Peek() = 30
Very common interview question.
4. Display Operation
Display means printing all elements of the stack from TOP to bottom.
Example:
30 20 10
This helps in debugging and checking stack status.
π» Stack Representation Using Array
Program Structure
#include <stdio.h> // Includes standard input-output library for printf, scanf
#define MAX 5 // Defines a constant MAX with value 5 (stack size limit)
int stack[MAX]; // Declares an integer array 'stack' of size MAX to store elements
int top = -1; // Initializes 'top' to -1 indicating stack is currently empty
Explanation:
stack[MAX]stores elementstop = -1means stack is empty
This is the base of stack implementation.
π» Program: Push Operation
#include <stdio.h> // Standard input-output library
#define MAX 5 // Maximum size of stack is 5
int stack[MAX]; // Array to store stack elements
int top = -1; // Stack is empty initially (-1 indicates empty stack)
void push(int value) // Function to insert an element into stack
{
if(top == MAX - 1) // Check if stack is full (overflow condition)
{
printf("Stack Overflow\n"); // Print error message if stack is full
return; // Exit function
}
top++; // Move top pointer to next position
stack[top] = value; // Insert value at top of stack
printf("%d pushed into stack\n", value); // Confirm insertion
}
int main() // Main function starts execution
{
push(10); // Push 10 into stack
push(20); // Push 20 into stack
push(30); // Push 30 into stack
return 0; // Program ends successfully
}
π» Program: Pop Operation
#include <stdio.h> // Standard input-output library for printf
#define MAX 5 // Defines maximum size of stack as 5
int stack[MAX]; // Array to store stack elements
int top = 2; // Top is set to 2 (currently 3 elements exist in stack)
void pop() // Function to remove top element from stack
{
if(top == -1) // Check if stack is empty (underflow condition)
{
printf("Stack Underflow\n"); // Print error message if stack is empty
return; // Exit function
}
printf("%d popped from stack\n", stack[top]); // Print element being removed
top--; // Decrease top pointer to remove element logically
}
int main() // Main function starts execution
{
stack[0] = 10; // Assign first element of stack
stack[1] = 20; // Assign second element of stack
stack[2] = 30; // Assign third element of stack (top = 2)
pop(); // Call pop function to remove top element
return 0; // Program ends successfully
}
π» Program: Peek Operation
#include <stdio.h> // Standard input-output library for printf
#define MAX 5 // Defines maximum size of stack as 5
int stack[MAX]; // Array to store stack elements
int top = 2; // Top index set to 2 (stack currently has 3 elements)
void peek() // Function to view top element without removing it
{
if(top == -1) // Check if stack is empty
{
printf("Stack is Empty\n"); // Print message if no elements exist
return; // Exit function
}
printf("Top element is %d\n", stack[top]); // Display top element of stack
}
int main() // Main function starts execution
{
stack[0] = 10; // First element of stack
stack[1] = 20; // Second element of stack
stack[2] = 30; // Third element of stack (current top)
peek(); // Call peek function to display top element
return 0; // Program ends successfully
}
π» Program: Display Stack
#include <stdio.h> // Standard input-output library for printf
#define MAX 5 // Defines maximum size of stack as 5
int stack[MAX] = {10, 20, 30}; // Initializes stack with 3 elements
int top = 2; // Top points to index 2 (last inserted element)
void display() // Function to display all stack elements
{
int i; // Loop variable for traversal
if(top == -1) // Check if stack is empty
{
printf("Stack is Empty\n"); // Print message if no elements
return; // Exit function
}
printf("Stack Elements are:\n"); // Heading for output
for(i = top; i >= 0; i--) // Traverse stack from top to bottom
{
printf("%d\n", stack[i]); // Print each stack element
}
}
int main() // Main function starts execution
{
display(); // Call display function to show stack elements
return 0; // Program ends successfully
}
π Stack Using Linked List (Brief Intro)
Stack can also be implemented using:
Arrays
Linked Lists
In Linked List implementation:
Push → Insert Node at Beginning
Pop → Delete First Node
Advantages:
Dynamic size
No fixed limit
Better memory usage
This is very common in technical interviews.
π Difference Between Stack and Queue
This is one of the most repeated interview questions.
π Real-Life Applications of Stack
Stacks are used in:
Browser back button
Undo and Redo systems
Expression evaluation
Syntax checking
Parentheses matching
Function call management
Recursion handling
Backtracking problems
DFS in Graphs
Compiler design
This makes stack one of the most practical data structures.
π‘ Practical Example: Parentheses Matching
When checking expressions like:
((A+B) * (C-D))
the compiler uses stack to verify whether all opening and closing brackets are balanced.
This is called:
Parentheses Matching
This is one of the most famous stack applications.
Very common in coding interviews.
π‘ Pro Tip for Interviews
Interviewers often ask:
Difference between Stack and Queue?
What is Stack Overflow?
What is Stack Underflow?
Why Stack follows LIFO?
Can Stack be implemented using Linked List?
Prepare these answers properly.
These are highly repeated interview questions.
⚡ Time Complexity
This is very important for placements.
❌ Common Mistakes Beginners Make
1. Forgetting Overflow Condition
Wrong:
top++;
stack[top] = value;
Correct:
Always check:
if(top == MAX - 1)
before push.
2. Forgetting Underflow Condition
Always verify:
if(top == -1)
before pop.
This prevents runtime errors.
3. Wrong Initialization of top
Correct:
int top = -1;
Not:
int top = 0;
This is a very common beginner mistake.
π― Interview Questions
Q1. What is Stack?
A linear data structure that follows LIFO.
Q2. What is LIFO?
Last In, First Out.
The last inserted element is removed first.
Q3. What is Stack Overflow?
When insertion is attempted in a full stack.
Q4. What is Stack Underflow?
When deletion is attempted from an empty stack.
Q5. Why is Stack important?
Because it helps in recursion, function calls, and expression handling.
❓ Frequently Asked Questions (FAQs)
Is Stack important for placements?
Yes. Extremely important.
It is one of the most asked DSA topics.
Can Stack be implemented using Linked List?
Yes.
Stack can be implemented using both Arrays and Linked Lists.
Which comes after Stack?
Usually:
Queue → Linked List → Trees → Graphs
depending on syllabus.
Is Stack faster than Array?
Stack operations are controlled and efficient, especially for insertion and deletion at TOP.
π Conclusion
Stack is one of the most important foundational topics in DSA.
In this blog, we learned:
✔ What is Stack
✔ Why it is needed
✔ LIFO Principle
✔ Push, Pop, Peek, Display
✔ Stack using Arrays
✔ Stack using Linked List
✔ Difference Between Stack and Queue
✔ Applications of Stack
✔ Time Complexity
✔ Common Mistakes
✔ Interview Questions
✔ FAQs
Mastering Stack makes Queue, Recursion, Trees, and Graphs much easier.
π Keep Learning. Keep Coding. Keep Growing.
✨ Written by Krishna Popat
π± Founder – Learning Growth Hub
Comments
Post a Comment