Stack in DSA

 Stack data structure :

A stack is a linear data structure that follows the principle of Last in First out (LIFO). this means last element inserted inside the stack is removed first.




LIFO Principle of Stack :

In Programming Language, putting an item on top of the stack is called PUSH and removing on item is called POP.

In the above, Although item 2 was kept list it was removed first this is exactly how the LIFO Principle works.

Basic Operations of Stack :
PUSH : it is adding an element to the TOP of a Stack.
POP : it is Removing an element from the TOP of a Stack.
isEmpty : Check if the Stack is Empty.
isFull : Check if the Stack is Full.

Working of Stack DSA :
  1. A pointer known as prime is employed to stay track of the highest component within the stack.
  2. When initializing the stack, we have a tendency to set its worth to -1 in order that we are able to check if the stack is empty by TOP == -1.
  3. On pushing a part, we have a tendency to increase the worth of prime and place the new component within the position pointed to by prime.
  4. On sound a part, we have a tendency to come the component pointed to by prime and cut back its worth.
  5. Before pushing, we have a tendency to check if the stack is already full
  6. Before popping, we have a tendency to check if the stack is already empty


Stack Implementation  using C, C++,  JAVA,  PYTHON:

Stack Implementation using C :
 // Stack implementation in C  
 #include <stdio.h>  
 #include <stdlib.h>  
 #define MAX 10  
 int count = 0;  
 // Creating a stack  
 struct stack {  
  int items[MAX];  
  int top;  
 };  
 typedef struct stack st;  
 void createEmptyStack(st *s) {  
  s->top = -1;  
 }  
 // Check if the stack is full  
 int isfull(st *s) {  
  if (s->top == MAX - 1)  
   return 1;  
  else  
   return 0;  
 }  
 // Check if the stack is empty  
 int isempty(st *s) {  
  if (s->top == -1)  
   return 1;  
  else  
   return 0;  
 }  
 // Add elements into stack  
 void push(st *s, int newitem) {  
  if (isfull(s)) {  
   printf("STACK FULL");  
  } else {  
   s->top++;  
   s->items[s->top] = newitem;  
  }  
  count++;  
 }  
 // Remove element from stack  
 void pop(st *s) {  
  if (isempty(s)) {  
   printf("\n STACK EMPTY \n");  
  } else {  
   printf("Item popped= %d", s->items[s->top]);  
   s->top--;  
  }  
  count--;  
  printf("\n");  
 }  
 // Print elements of stack  
 void printStack(st *s) {  
  printf("Stack: ");  
  for (int i = 0; i < count; i++) {  
   printf("%d ", s->items[i]);  
  }  
  printf("\n");  
 }  
 // Driver code  
 int main() {  
  int ch;  
  st *s = (st *)malloc(sizeof(st));  
  createEmptyStack(s);  
  push(s, 1);  
  push(s, 2);  
  push(s, 3);  
  push(s, 4);  
  printStack(s);  
  pop(s);  
  printf("\nAfter popping out\n");  
  printStack(s);  
 }  
Stack Implementation using C++ :
 // Stack implementation in C++  
 #include <stdlib.h>  
 #include <iostream>  
 using namespace std;  
 #define MAX 10  
 int size = 0;  
 // Creating a stack  
 struct stack {  
  int items[MAX];  
  int top;  
 };  
 typedef struct stack st;  
 void createEmptyStack(st *s) {  
  s->top = -1;  
 }  
 // Check if the stack is full  
 int isfull(st *s) {  
  if (s->top == MAX - 1)  
   return 1;  
  else  
   return 0;  
 }  
 // Check if the stack is empty  
 int isempty(st *s) {  
  if (s->top == -1)  
   return 1;  
  else  
   return 0;  
 }  
 // Add elements into stack  
 void push(st *s, int newitem) {  
  if (isfull(s)) {  
   printf("STACK FULL");  
  } else {  
   s->top++;  
   s->items[s->top] = newitem;  
  }  
  size++;  
 }  
 // Remove element from stack  
 void pop(st *s) {  
  if (isempty(s)) {  
   printf("\n STACK EMPTY \n");  
  } else {  
   printf("Item popped= %d", s->items[s->top]);  
   s->top--;  
  }  
  size--;  
  cout << endl;  
 }  
 // Print elements of stack  
 void printStack(st *s) {  
  printf("Stack: ");  
  for (int i = 0; i < size; i++) {  
   cout << s->items[i] << " ";  
  }  
  cout << endl;  
 }  
 // Driver code  
 int main() {  
  int ch;  
  st *s = (st *)malloc(sizeof(st));  
  createEmptyStack(s);  
  push(s, 1);  
  push(s, 2);  
  push(s, 3);  
  push(s, 4);  
  printStack(s);  
  pop(s);  
  cout << "\nAfter popping out\n";  
  printStack(s);  
 }  
Stack Implementation using JAVA :
 // Stack implementation in Java  
 class Stack {  
  private int arr[];  
  private int top;  
  private int capacity;  
  // Creating a stack  
  Stack(int size) {  
   arr = new int[size];  
   capacity = size;  
   top = -1;  
  }  
  // Add elements into stack  
  public void push(int x) {  
   if (isFull()) {  
    System.out.println("OverFlow\nProgram Terminated\n");  
    System.exit(1);  
   }  
   System.out.println("Inserting " + x);  
   arr[++top] = x;  
  }  
  // Remove element from stack  
  public int pop() {  
   if (isEmpty()) {  
    System.out.println("STACK EMPTY");  
    System.exit(1);  
   }  
   return arr[top--];  
  }  
  // Utility function to return the size of the stack  
  public int size() {  
   return top + 1;  
  }  
  // Check if the stack is empty  
  public Boolean isEmpty() {  
   return top == -1;  
  }  
  // Check if the stack is full  
  public Boolean isFull() {  
   return top == capacity - 1;  
  }  
  public void printStack() {  
   for (int i = 0; i <= top; i++) {  
    System.out.println(arr[i]);  
   }  
  }  
  public static void main(String[] args) {  
   Stack stack = new Stack(5);  
   stack.push(1);  
   stack.push(2);  
   stack.push(3);  
   stack.push(4);  
   stack.pop();  
   System.out.println("\nAfter popping out");  
   stack.printStack();  
  }  
 }  
Stack Implementation using PYTHON :
 # Stack implementation in python  
 # Creating a stack  
 def create_stack():  
   stack = []  
   return stack  
 # Creating an empty stack  
 def check_empty(stack):  
   return len(stack) == 0  
 # Adding items into the stack  
 def push(stack, item):  
   stack.append(item)  
   print("pushed item: " + item)  
 # Removing an element from the stack  
 def pop(stack):  
   if (check_empty(stack)):  
     return "stack is empty"  
   return stack.pop()  
 stack = create_stack()  
 push(stack, str(1))  
 push(stack, str(2))  
 push(stack, str(3))  
 push(stack, str(4))  
 print("popped item: " + pop(stack))  
 print("stack after popping an element: " + str(stack))  

For Videos Join Our Youtube Channel: Join Now