下午要交作业,急求各位大佬!。初次将变量赋值NULL,再次使用变量时其内容不为NULL
本人小白,本想做一个链队,但是出了点问题。代码如下:
#include <stdio.h>
#include <stdlib.h>
typedef struct linkqueue
{
char Q;
struct linkqueue *next;
}linkqueue;
void initqueue(linkqueue *lq)
{
lq = (linkqueue*)malloc(sizeof(struct linkqueue));
lq->next = NULL;
if(lq->next)
{
printf("error0");
}
}
void enqueue(linkqueue *front,linkqueue *rear,linkqueue *lq,char x)
{
lq = (linkqueue*)malloc(sizeof(struct linkqueue));
if(front->next)
{
printf("error1");
}
if(rear->next)
{
printf("error1");
}
if(isnull(front,rear))
{
front->next = lq;
rear->next = lq;
lq->Q = x;
lq->next = NULL;
}
else
{
lq->next = rear->next;
lq->Q = x;
rear->next = lq;
}
}
void dequeue(linkqueue *front,linkqueue *rear)
{
if(isnull(front,rear))
{
printf("队列为空!");
}
else
{
linkqueue *q = front;
front = front->next;
printf("出栈元素为:%c",front->Q);
free(q);
}
}
int isnull(linkqueue *front,linkqueue *rear)
{
if(front->next)
{
printf("error2");
}
if(rear->next)
{
printf("error2");
}
if(front->next&&rear->next)
{
return 1;
}
if(front->next == rear)
{
return 1;
}
else
{
return 0;
}
}
int main()
{
linkqueue *front,*rear,*lq;
char x;
int i;
initqueue(front);
initqueue(rear);
for(i=0;i<5;i++)
{
enqueue(front,rear,lq,'a'+i);
}
while(isnull(front,rear))
{
dequeue(front,rear);
}
}
实际操作时,入栈操作那里没有执行,调试的时候发现在第一次执行isnull语句的时候(也就是enqueue函数里面执行的时候),并没有return 1 ;
然后我加入error的判断语句,结果如下:(搞不了图片{:10_266:} )
error1error1error2error2
也就是没有error0,就是刚开始lq->next = NULL;是成功了的,但是后面再次调用的时候他又不为NULL了。
求问大佬怎么解决下午要交作业{:10_266:} 进出队列要修改,队头和队尾,应改传入&rear,&front 最后的魁拔 发表于 2020-4-20 08:41
进出队列要修改,队头和队尾,应改传入&rear,&front
嗯嗯,谢谢大佬解答,修改后程序可以运行了。
但是那里isnull返回不了1,也就是enqueue那里入不了第一个元素,这样出队的时候front->next没有值。 你这个有没有头结点呢 最后的魁拔 发表于 2020-4-20 09:09
你这个有没有头结点呢
我是把front做为头,所以在进队的时候要isnull返回了1才能让front-> next指向元素。 最后的魁拔 发表于 2020-4-20 08:41
进出队列要修改,队头和队尾,应改传入&rear,&front
谢谢大佬,只需要在您答案的基础上,在init那里传入2级指针就可以了{:10_297:}
页:
[1]