Skip to main content

Interactive program to simulate Queue functionality using Linked list


/*
 * Copy right by Shiv Yaragatti
 * you are free to use, modify  and redistribute code on own risk
 * Interactive C Program to implement Queue using  linked list
 */

/* header needs have all required header files like stdio.h etc */
 #include "header.h"

struct queue {
int data;
struct queue *next;
};
typedef struct queue *Q;

/* Queue head */
struct qhead_struct {
struct queue  *head;
struct queue  *tail;
};
typedef struct qhead_struct  *H;

/* Insert elements into queue */
void insert(H *hq)
{
  int e;
  Q temp;
 temp= malloc(sizeof(struct queue));
 if(!temp) {
   printf("Can't allocate memory\n");
   return;
 }
 printf("Enter element\n");
 scanf("%d", &e);
 temp->data =e;
 temp->next = NULL;

/* add element queue at tail */
 if((*hq)->head == NULL) {
    (*hq)->head =(*hq)->tail =temp;
 } else {
    (*hq)->tail->next = temp;
    (*hq)->tail = temp;
    
 }
   
}

/* delete elements from queue */
void del(H *hq){
Q temp;
 temp= (*hq)->head;
 if((*hq)->;head == NULL){
    printf("Q is empty ..\n");
    return;
 }
printf("Deleted element is %d\n", temp->data);
/* delete from head */ 
 (*hq)->head = (*hq)->head->next; 
 free(temp);

}

/* Display elements in the queue */
void display(H hq){
      Q temp;

 if(hq->head == NULL){
    printf("Empty Queue\n");
    return;
 }
 temp=hq->head;
 printf("Elements in Queue are \n");
 while(temp){
    printf("%d\n", temp->data);
    temp=temp->next;
 }
}

/* main program to help simulate queue operations */
int main()
{
 struct qhead_struct *qhead;
 int ch;
 
 qhead = malloc(sizeof(struct qhead_struct));
 qhead->head = NULL;
 qhead->tail = NULL;
 while(1) {
 system("clear");
 printf("1 Insert\n2 del\n3 display\n4 exit\n");
 printf("Enter you choice\n");
 scanf("%d", &ch);
 switch(ch) {
   case 1: insert(&qhead);
       break;
   case 2: del(&qhead); 
       break;
   case 3: display(qhead);
       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      * str...

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 it...

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 */...