C program to implement a linked stack

C program to implement a linked stack

##include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <malloc.h>
struct stack
{
int data;
struct stack *next;
};
struct stack *top = NULL;
struct stack *push(struct stack *, int);
struct stack *display(struct stack *);
struct stack *pop(struct stack *);
int peek(struct stack *);
int main(int argc, char *argv[]) {
int val, option;
do
{
 printf("\n *****MAIN MENU*****");
 printf("\n 1. PUSH");
 printf("\n 2. POP");
 printf("\n 3. PEEK");
 printf("\n 4. DISPLAY");
 printf("\n 5. EXIT");
 printf("\n Enter your option: ");
 scanf("%d", &option);
 switch(option)
 {
 case 1:
 printf("\n Enter the number to be pushed on stack: ");
 scanf("%d", &val);
 top = push(top, val);
 break;
 case 2:
 top = pop(top);
 break;
 case 3:
 val = peek(top);
 if (val != -1)
 printf("\n The value at the top of stack is: %d", val);
 else
 printf("\n STACK IS EMPTY");
 break;
 case 4:
 top = display(top);
 break;
 }
}while(option != 5);
return 0;
}
struct stack *push(struct stack *top, int val)
{
struct stack *ptr;
ptr = (struct stack*)malloc(sizeof(struct stack));
ptr -> data = val;
if(top == NULL)
{
 ptr -> next = NULL;
 top = ptr;
}
else
{
 ptr -> next = top;
 top = ptr;
}
return top;
}
struct stack *display(struct stack *top)
{
struct stack *ptr;
ptr = top;
if(top == NULL)
printf("\n STACK IS EMPTY");
else
{

while(ptr != NULL)
 {
 printf("\n %d", ptr -> data);
 ptr = ptr -> next;
 }
}
return top;
}
struct stack *pop(struct stack *top)
{
struct stack *ptr;
ptr = top;
if(top == NULL)
printf("\n STACK UNDERFLOW");
else
{
 top = top -> next;
 printf("\n The value being deleted is: %d", ptr -> data);
 free(ptr);
}
return top;
}
int peek(struct stack *top)
{
if(top==NULL)
return -1;
else
return top ->data;
}

Output

  1. PUSH
  2. POP
  3. Peek
  4. DISPLAY
  5. EXIT
    Enter your option : 1
    Enter the number to be pushed on stack : 100

Leave a Comment