user2227862 user2227862 - 2 months ago 24
C Question

Implementation of queue using linked list in c

I am trying to implement queue using a linked list. I am using the following code but my display function is not working properly:

What is wrong with my code?

My Code:

#include<stdio.h>
#include<stdlib.h>

struct node
{
int info;
struct node *link;
}*front=NULL,*rear=NULL;

void insert(int item);
int del();
int peek();
int isEmpty();
void display();

main()
{
int choice,item;
while(1)
{
printf("1.Insert\n");
printf("2.Delete\n");
printf("3.Display the element at the front\n");
printf("4.Display all elements of the queue\n");
printf("5.Quit\n");
printf("Enter your choice : ");
scanf("%d", &choice);

switch(choice)
{
case 1:
printf("Input the element for adding in queue : ");
scanf("%d",&item);
insert(item);
break;
case 2:
printf("Deleted element is %d\n",del());
break;
case 3:
printf("Element at the front of the queue is %d\n", peek() );
break;
case 4:
display();
break;
case 5:
exit(1);
default :
printf("Wrong choice\n");
}
}
}

void insert(int item)
{
struct node *tmp;
tmp=(struct node *)malloc(sizeof(struct node));
if(tmp==NULL)
{
printf("Memory not available\n");
return;
}
tmp->info = item;
tmp->link=NULL;
if(front==NULL) /*If Queue is empty*/
front=tmp;
rear=tmp;
}

int del()
{
struct node *tmp;
int item;
if( isEmpty( ) )
{
printf("Queue Underflow\n");
exit(1);
}
tmp=front;
item=tmp->info;
front=front->link;
free(tmp);
return item;
}

int peek()
{
if( isEmpty( ) )
{
printf("Queue Underflow\n");
exit(1);
}
return front->info;
}

int isEmpty()
{
if(front==NULL)
return 1;
else
return 0;

}

void display()
{
struct node *ptr;
ptr=front;
if(isEmpty())
{
printf("Queue is empty\n");
return;
}
printf("Queue elements :\n\n");
while(ptr!=NULL)
{
printf("%d ",ptr->info);
ptr=ptr->link;
}
printf("\n\n");
}

Answer

Your insert function doesn't link the new nodes into the list properly. You just set the tail to point to the new node, but you don't make the previous tail node link point to the new tail.