我在队列中插入元素但是正在运行无限循环 // x是要输入的元素
void enqueue(int x)
{
queue *ptr;
ptr=(queue*)malloc(sizeof(queue));
ptr->info=x;
if(front==NULL&&rear==NULL)
{
front=rear=ptr;
ptr->next=NULL;
}
else
{
rear->next=ptr;
rear=ptr;
}
}
//显示打印元素的功能
void show()
{
queue *ptr=front;
while(ptr!=NULL)
{
printf("%d\n",ptr->info);
ptr=ptr->next;
}
}
答案 0 :(得分:1)
您需要添加ptr->next=NULL
,在您的情况下将其设置在if循环中。它应该在两个条件下设置
void enqueue(int x)
{
queue *ptr;
ptr=malloc(sizeof(queue)); // As sourav mentioned you don't need to cast here
ptr->info=x;
ptr->next=NULL;
if(front==NULL&&rear==NULL)
{
front=rear=ptr;
//ptr->next=NULL;
}
else
{
rear->next=ptr;
rear=ptr;
}
}
答案 1 :(得分:0)
您只是在一个案例中将ptr->next
设置为NULL
,您应该为两者(或if
声明之外完成此操作):
void enqueue(int x) {
queue *ptr = malloc (sizeof (*ptr));
// should really check for NULL here first
ptr->info = x;
ptr->next = NULL;
// If front is NULL, rear should be as well,
// so only need check one.
if (front == NULL) {
front = rear = ptr;
} else {
rear->next = ptr;
rear = ptr;
}
}
你会注意到我修复过的其他几件事,特别是:
malloc
的返回值的转换,这可能很危险。malloc
这样的灾难性后果。