我的程序有问题。我已经创建了一个链表队列,当我用delQueue
函数清除我的队列时,我的队列消失了,我不能再推任何东西了。
我该如何解决这个问题?我的push函数工作得很好,除非我从队列中删除所有内容。
下面是我的代码:#include <stdio.h>
#include <time.h>
#include <stdlib.h>
int count = 0;
struct Node
{
int Data;
struct Node* next;
}*rear, *front;
void delQueue()
{
struct Node *var=rear;
while(var!=NULL)
{
struct Node* buf=var->next;
free(var);
count = count + 1;
}
}
void push(int value)
{
struct Node *temp;
temp=(struct Node *)malloc(sizeof(struct Node));
temp->Data=value;
if (front == NULL)
{
front=temp;
front->next=NULL;
rear=front;
}
else
{
front->next=temp;
front=temp;
front->next=NULL;
}
}
void display()
{
struct Node *var=rear;
if(var!=NULL)
{
printf("nElements in queue are: ");
while(var!=NULL)
{
printf("t%d",var->Data);
var=var->next;
}
printf("n");
}
else
printf("nQueue is Emptyn");
}
void delQueue()
{
while(rear != NULL) {
struct Node* var=rear->next;
free(rear);
count = count + 1;
rear = var; /* update rear */
}
front = NULL; /* clear the front */
}
在释放"var"之后(当您再次循环时),您正在查看它。你的意思是在delQueue()循环中分配"var = buf"吗?
另外,不要忘记在push()例程中检查malloc()的返回值是否为NULL。即使这只是一个小的学习程序,你也应该学会总是检查…
int delQueue()
{
int count = 0;
while ( front != NULL )
{
struct Node * temp = front;
front = front -> next;
free (temp);
count++;
}
rear= NULL;
return count;
}
因为它是一个队列,我更喜欢从前面删除元素,而不是后面。
您必须在delQueue()
末尾添加以下行