我正在尝试使用链表实现队列。我使用以下代码,但我的显示功能无法正常工作:
我的代码出了什么问题?
我的代码:
#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");
}
答案 0 :(得分:4)
您的insert
函数未正确地将新节点链接到列表中。您只需将尾部设置为指向新节点,但不要将前一个尾节点链接指向新尾部。
答案 1 :(得分:3)
将插入功能修改为:
if(front==NULL) /*If Queue is empty*/
front=tmp;
else
rear->link = tmp;
/*The above statement would link the the previous node to the newly created node*/
rear=tmp;
答案 2 :(得分:1)
Enqueue Algorithm :
1. Create a newNode with data and address.
2. if queue i.e front is empty
i. front = newnode;
ii. rear = newnode;
3. Else
i.rear->next = newnode;
ii.rear = newnode;
Dequeue Algorithm :
1. if queue is i.e front is NULL printf("\nQueue is Empty \n");
2. Else next element turn into front
i. struct node *temp = front ;
ii. front = front->next;
iii.free(temp);
#include<stdio.h>
#include<stdlib.h>
struct node
{
int data;
node *next;
};
node *front = NULL;
node *rear =NULL;
node *creation(int data)
{
tmp=(struct node *)malloc(sizeof(struct node));
tmp->data = data;
tmp->next=NULL;
return tmp;
}
void Insert(int item)
{
struct node *newnode = creation(item);
if(front==NULL)
{
front = rear = newnode;
}
else
{
rear->next = newnode;
rear = newnode;
}
}
void Delete()
{
struct node *temp;
if (front == NULL)
{
printf("\nQueue is Empty \n");
return;
}
else
{
temp = front;
front = front->next;
if(front == NULL) rear = NULL;
free(temp);
}
}
void display()
{
struct node *temp=front;
if(front == NULL)
{
printf("Queue is Overflow\n");
}
else
{
printf("Queue is :\n");
while(temp != NULL)
{
printf("%d ", temp->data);
temp = temp->next;
}
}
printf("\n");
}