Я реализовал очередь в 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;
}