队列的链表C编程



我的程序有问题。我已经创建了一个链表队列,当我用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()

末尾添加以下行

相关内容

  • 没有找到相关文章

最新更新