Skip to main content

Interactive C program to implement stack using doubly linked list


shiv@ubuntu:~/ds/stack$ cat stack.c
/*
 * Copy right by Shiv Yaragatti
 * you are free to use, modify  and redistribute code on own risk
 * Interactive C Program to implement STACK using Doubly linked list
 */

#include "header.h"

struct stack {
int data;
struct stack *next;
struct stack *prev;

};

typedef struct stack *S;
/*Push elements in to stack */
void push(S *stack)
{
  int e;
  S temp;
  temp=malloc(sizeof(struct stack));
  if(!temp){
     printf("Can't allocate memory\n");
     return;
 }
 printf("Enter element to push\n");
 scanf("%d", &e);

 temp->data=e;
 if(*stack == NULL){
    temp->next = temp->prev = NULL;
    *stack=temp;
 } else {
   temp->next = *stack;
   (*stack)->prev = temp;
   temp->prev = NULL;
   *stack=temp;
 }

}
/* Display elements in the stack */
void display(S s){
   S temp;

   temp=s;
   printf("Elements are ...\n");
   while(temp) {
    printf("%d\n", temp->data);
    temp=temp->next;
   }

}
/* Pop out elements in stack */
void pop(S *stack)
{
  S del;
  if(*stack == NULL){
     printf("Stack is Empty ..\n");
     return;
  }
  printf("Deleted .. %d\n", (*stack)->data);
  del = *stack;
  *stack = (*stack)->next;
  /* free memory once poped */
  free(del);
  if((*stack)){
     (*stack)->prev = NULL;
  }

}

/* main program that help you to simulate stack operations*/
int main()
{

int ch;
S s=NULL;
while(1){
system("clear");
printf("1 Push\n2 Pop\n3 Display\n4 exit\n");
printf("Enter you choice\n");
scanf("%d", &ch);

 switch(ch) {
    case 1: push(&s); break;
    case 2: pop(&s); break;
    case 3: display(s); break;
    case 4: exit(0);
    default: printf("invalid choice\n");
 }
getchar();
getchar();
}
return 0;
}
/* end of the program */

Comments

Popular posts from this blog

C Program to Simulate Linux Cat command

/*  * C program to Simulate Implementation of  Linux *cat* command  * This program will not handle redirection  * you can try to improve this program to handle redirection of file contents  */ #include<stdio.h> #include<string.h> #define MAX_FILE_NAME_CHARS 255 int main(int argc, char *argv[]) {  FILE *fp;  char file_name[MAX_FILE_NAME_CHARS], ch;  int i;  /*   * after creating a.out, rename it as mycat for our own cat command   * and it usage is same as standard cat command   */  if(argc<1){     printf("Usage mycat <filename> \n");     return 0;  }  /*   * cat handles more than one file   * so we need this loop to handle all the files provided   * on command line   */  for(i=1; i<=argc;i++){     /* no need of copy but for understanding purpose, i have created      * string for each file name      */     strncpy(file_name, argv[i], MAX_FILE_NAME_CHARS);     fp=fopen(file_name, "r");     if(fp == NULL) {   

simple program to create Orphan process

shiv@ubuntu:~/ds/unix$ cat  orp.c /*  * Program to create orphan process @ Linux  * getpid() gives process PID and   * getppid() gives process's parent ID   * here main() process ID is parent id is current shells PID  * once process becomes orphan it is adopted by init process(it's PID is 1)  */   #include<stdio.h> #include<unistd.h> int main() {  pid_t p; /* create child process */  p=fork();  if(p==0) {     /* fork() returns Zero to child */     sleep(10);  }  printf("The child process pid is %d parent pid %d\n", getpid(), getppid()); /*parent/child waits for 20 secs and exits*/  sleep(20);  printf("\nProcess %d is done its Parent pid %d...\n", getpid(), getppid());  return 0; } O/p shiv@ubuntu:~/ds/unix$ ./a.out The child process pid is 2575 parent pid 1922 The child process pid is 2576 parent pid 2575 Process 2575 is done its Parent pid 1922... shiv@ubuntu:~/ds/unix$ Process 2576 is done its Parent pid 1...