0

プログラムに問題があります。リンクされたリストのキューを作成しました。delQueue関数でキューをクリアすると、キューが消え、何もプッシュできなくなります。

どうすればこれを修正できますか? キューからすべてを削除しない限り、プッシュ機能は正常に機能します。

これが私のコードです:

#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 Empty\n");
}
4

4 に答える 4

0
 int delQueue()
    {
   int count = 0;
    while ( front != NULL )
    {
    struct Node * temp = front;
    front = front -> next;
    free (temp);
    count++;
    }
    rear= NULL;

    return count;
    }

キューなので、後ろからではなく前から要素を削除したいと思います。

于 2013-05-04T02:19:36.470 に答える
0

delQueue() の最後に次の行を追加する必要があります

リア = フロント = NULL;

于 2013-05-04T05:23:09.563 に答える
0
void delQueue()
{
    while(rear != NULL) {
        struct Node* var=rear->next;
        free(rear);
        count = count + 1;
        rear = var;         /* update rear */
    }
    front = NULL; /* clear the front */
}
于 2013-05-04T02:09:06.900 に答える
0

「var」を解放した後 (再びループを回るとき) を見ています。delQueue() のループで「var = buf」を代入するつもりだったのですか?

また、push() ルーチンで malloc() からの戻り値が NULL であることを確認することを忘れないでください。これが単なる小さな学習プログラムであっても、常にチェックすることを学ぶ必要があります...

于 2013-05-04T02:07:14.903 に答える