Explain the stack by using linked list in C language



Stack over flow and stack under flow can be avoided by allocating memory dynamically.

Operations carried out under stack in C programming language are as follows −

  • Push
  • Pop

Push

Following is the basic implementation of a linked list −

&item = 10 newnode = (node*) malloc (sizeof (node)); newnode ->data = item; newnode ->link = NULL; newnode ->link = start; start = newnode;

pop

The syntax is as follows −

Syntax

if (start = = NULL) printf("Deletion is not possible.List is empty") else{    temp = start;    start = start link;    free (temp); }

Program

Following is the C program for stack by using linked lists −

#include <stdio.h> #include <stdlib.h> struct node{    int info;    struct node *ptr; }*top,*top1,*temp; int topelement(); void push(int data); void pop(); void empty(); void display(); void destroy(); void stack_count(); void create(); int count = 0; void main(){    int no, ch, e;    printf("
1 - Push");    printf("
2 - Pop");    printf("
3 - Top");    printf("
4 - Empty");    printf("
5 - Exit");    printf("
6 - Display");    printf("
7 - Stack Count");    printf("
8 - Destroy stack");    create();    while (1){       printf("
Enter choice : ");       scanf("%d", &ch);       switch (ch){          case 1:             printf("Enter element : ");          scanf("%d", &no);          push(no);          break;          case 2:             pop();          break;          case 3:             if (top == NULL)                printf("stack is empty");          else{             e = topelement();             printf("
Top element : %d", e);          }          break;          case 4:             empty();          break;          case 5:             exit(0);          case 6:             display();          break;          case 7:             stack_count();          break;          case 8:             destroy();          break;             default :          printf(" wrong choice:Try again ");          break;       }    } } //empty stack void create(){    top = NULL; } void stack_count(){    printf("
no: of elements in stack : %d", count); } //push data void push(int data){    if (top == NULL){       top =(struct node *)malloc(1*sizeof(struct node));       top->ptr = NULL;       top->info = data;    }    else{       temp =(struct node *)malloc(1*sizeof(struct node));       temp->ptr = top;       temp->info = data;       top = temp;    }    count++; } void display(){    top1 = top;    if (top1 == NULL){       printf("empty stack");       return;    }    while (top1 != NULL){       printf("%d ", top1->info);       top1 = top1->ptr;    } } void pop(){    top1 = top;    if (top1 == NULL){       printf("
error");       return;    }    else       top1 = top1->ptr;       printf("
Popped value : %d", top->info);       free(top);       top = top1;       count--;    }    int topelement(){       return(top->info);    }    //check stack empty or not    void empty(){       if (top == NULL)          printf("
empty stack");       else          printf("
stack not empty with %d values", count);       }       void destroy(){          top1 = top;       while (top1 != NULL){          top1 = top->ptr;          free(top);       top = top1;       top1 = top1->ptr;    }    free(top1);    top = NULL;    printf("
all are destroyed");    count = 0; }

Output

When the above program is executed, it produces the following result −

1 - Push 2 - Pop 3 - Top 4 - Empty 5 - Exit 6 - Display 7 - Stack Count 8 - Destroy stack Enter choice: 1 Enter element: 23 Enter choice: 1 Enter element: 45 Enter choice: 1 Enter element: 56 Enter choice: 2 Popped value: 56 Enter choice: 6 45 23 Enter choice: 8 all are destroyed Enter choice: 6 empty stack Enter choice: 5
Updated on: 2021-03-26T06:47:11+05:30

3K+ Views

Kickstart Your Career

Get certified by completing the course

Get Started
Advertisements