In the below attached code, while adding using option 1, option 3&4 to print works ok. But after using opton 2 (dqueue), the printing options 3&4 does not work ok. Where am I making the mistake.
after selecting option 2 to dequeue, option 3 and
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
/* --------------------------
----------
----------
--------- */
/* Definitions */
#define READAHEAD 1
#define READBACK 2
typedef struct queuenode
{
int val;
struct queuenode *next,*prev;
}node;
node *front=NULL, *rear=NULL;
/* --------------------------
----------
----------
--------- */
/* Declarations */
void enqueue(int);
int dequeue(void);
void printqueue(char);
/* --------------------------
----------
----------
--------- */
/* Entry Point - Start here */
void main()
{
int ch,num;
do
{
/* Read User Input */
clrscr();
printf("\n\n DQUEUE SOLUTION - MAIN MENU");
printf("\n----------------
----------
---\n");
printf("\n1 - ADD (Add value to Queue)");
printf("\n2 - REMOVE (Remove node from Queue)");
printf("\n3 - Front to Rear Printing");
printf("\n4 - Rear to Front Printing");
printf("\n5 - Exit\n");
printf("\nChoose the option :- ");
/* accepting user's choice */
scanf("%d",&ch);
switch(ch)
{
case 1: /* inserting value to queue at front */
printf("\nEnter the value to Enqueue :- ");
scanf("%d", &num);
enqueue(num);
break;
case 2: /* deleting value from rear side of queue */
if(front != NULL) /* checking if queue exists */
{
num=dequeue();
/* print the dequeued value */
printf("\nThe Dequeued value is - %d.",num);
}
else
printf("\n\nEmpty Queue.");
break;
case 3: /* printing from front to rear */
if(front != NULL)
{
printf("\nThe Queue from Front to Rear is -\n");
printqueue(READAHEAD);
getch();
}
else
printf("\n\nEmpty Queue.");
break;
case 4:
if(front != NULL) /* printing from rear to front */
{
printf("\nThe Queue from Rear to Front is -\n");
printqueue(READBACK);
getch();
}
else
printf("\n\nEmpty Queue.");
break;
case 5:
break;
default:
printf("\nKindly enter the correct choice (1-5).");
break;
}
}while(ch!=5);
}
/* --------------------------
----------
----------
--------- */
/* Below function is to add new queues at rear end of the queue */
void enqueue(int num)
{
node *temp=(node*)malloc(sizeof
(node));
temp->val=num;
temp->next=temp->prev=NULL
;
if(front==NULL)
front=temp;
else
{
rear->next=temp;
temp->prev=rear; /* value added after rear */
}
rear=temp; /* rear represents the new member */
}
/* --------------------------
----------
----------
--------- */
/* this function deletes the front value from queue and returns it */
int dequeue()
{
node *temp;
int delval;
if(front==NULL)
return -999;
temp=front;
front=front->next; /* front moves to next member in queue */
if(front==NULL)
rear=NULL; /* rear also changes if there was only one value in queue */
else
front->next=NULL;
delval=temp->val;
free(temp); /* memory free */
return delval; /* deleted value returned */
}
/* --------------------------
----------
----------
--------- */
/* As per user choice, print the queue */
void printqueue(char ch)
{
node *temp;
if(front==NULL)
{
printf("\n\nEmpty Queue.");
return;
}
/* looping from front to rear or rear to front depending on choice */
for(temp=(ch==READAHEAD?fr
ont:rear);
temp!=NULL
;temp=(ch=
=READAHEAD
?temp->nex
t:temp->pr
ev))
printf("\n%d",temp->val); /* printing queue values */
getchar();
}