队列陷入循环

时间:2019-02-28 16:10:31

标签: c algorithm gcc queue

我在C中实现了队列,如下所示。但是它陷入了循环。 如果我从free()中删除了deQueue(),那么它可以正常工作。 这种行为的原因是什么。

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

struct item{

    int value;
    struct item* next;
};

struct item *front = NULL, *rear = NULL;

bool isEmpty(){

    return (front == NULL);
}

bool isFull(){

    return false;
}

bool enQueue( int value ) {

    struct item *temp = (struct item*) malloc( sizeof( struct item ) );
    if( temp == NULL ) {

        return false;
    }

    temp->value = value;
    temp->next = NULL;

    if( front == NULL ) {

        printf("Front is NULL\n");

        front = temp;
    }

    if( rear == NULL ) {

        printf("Rear is NULL\n");
        rear = temp;
    } else {

        printf("Rear Value %d \n", rear->value );

        rear->next = temp;
        rear = rear->next;

        printf("Rear Value %d \n", rear->value );
    }

    return true;
}

struct item* deQueue() {

    struct item *temp = front;
    front = front->next;

    return temp;
}

struct item* getFront(){

    return front;
}

struct item* getRear(){

    return rear;
}

void display(){

    struct item* temp = front;
    printf("\n[ ");
    while( temp ){

        printf("%d, ", temp->value);
        temp = temp->next;
    }
    printf("]\n");
}

int main(){

    enQueue(1);
    display();
    free(deQueue());
    display();
    enQueue(2);
    display();

    return 0;
}

1 个答案:

答案 0 :(得分:4)

echo implode(',', $result); // England,China,Uruguay,Spain,Taiwan 更新deQueue,但不更新front。在物品从物品下方被销毁后,后者就剩下一个悬空的指针。