Spread the love
Stack is abstract data type in data structure which works as LIFO principle. LIFO means “Last in First out”, i.e the element which we have inserted last will be used first and the element that we have inserted first will be used last. You can have c program to implement stack using array and using linked list. Single variables are used to implement stack, i.e “top”. Insertion and deletion will be performed at top side. Real-life example of stacks are above which will use concept of stack.
Stack implementation using Array
#include <stdio.h> int A[10], top=-1; // Creating Stack int size_A = sizeof(A)/sizeof(A[0]); // Calculating Size of Array /* Driver Functions */ void Push(int data); int Pop(); void PrintStack(); int IsEmpty(); /* Main Method */ int main() { Push(0); Push(1); Push(2); Push(3); Pop(); // Delete 3 from starting Pop(); // Delete 2 from starting PrintStack(); //Print Stack return 0; } /* Check for empty stack */ int IsEmpty() { if(top==-1) return 1; else return 0; } /* Insert Element */ void Push(int data) { if(IsEmpty()) top = 0; else if( top == size_A ) printf("\n Stack is Full \n"); else top++; A[top] = data; } /* Delete Element */ int Pop() { if(IsEmpty()) printf("\n Stack is Empty \n"); else top--; return A[top-1]; } /* Print Stack */ void PrintStack() { int i=0; for(i=0;i<=top;i++) printf(" %d",A[i]); }
Stack implementation using Linked List
#include <stdio.h> #include <stdlib.h> /* List Structure */ typedef struct Node { int data; struct Node *link; }node; int NoOfNodes=0; // Count number of node node *head=NULL; // Head node to keep track of list /* Driver Functions */ void Push(int data); int Pop(); void PrintStack(node *); /* Main Method */ int main() { Push(0); Push(1); Push(2); Push(3); Pop(); // Delete 3 from Stack Pop(); // Delete 2 from Stack PrintStack(head); // Print Stack data return 0; } /* Insert Element */ void Push(int data) { // Declaring node NoOfNodes++; node *temp = (node*)calloc(1,sizeof(node)); temp->data = data; temp->link = NULL; // If head is NULL or first node if(!head) { head = temp; return; } // Traverse list upto end node *traverse=head; while(traverse->link) traverse = traverse->link; traverse->link = temp; } /* Delete Element */ int Pop() { node *traverse = head; for(int i=0;i<NoOfNodes-2;i++) traverse = traverse->link; node *Delete = traverse->link; traverse->link = NULL; int data = Delete->data; free(Delete); NoOfNodes--; return data; } /* Print Stack */ void PrintStack(node *p) { printf(" %d",p->data); if(!p->link)return; PrintStack(p->link); }
Suggested Readings
- https://www.youtube.com/user/mycodeschool
- Write a c program to implement a queue using array and linked list
- Program to check balanced parentheses in expression c++