摩尔曼斯克 发表于 2020-4-20 08:14:44

下午要交作业,急求各位大佬!。初次将变量赋值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:}

最后的魁拔 发表于 2020-4-20 08:41:49

进出队列要修改,队头和队尾,应改传入&rear,&front

摩尔曼斯克 发表于 2020-4-20 09:03:49

最后的魁拔 发表于 2020-4-20 08:41
进出队列要修改,队头和队尾,应改传入&rear,&front

嗯嗯,谢谢大佬解答,修改后程序可以运行了。
但是那里isnull返回不了1,也就是enqueue那里入不了第一个元素,这样出队的时候front->next没有值。

最后的魁拔 发表于 2020-4-20 09:09:57

你这个有没有头结点呢

摩尔曼斯克 发表于 2020-4-20 09:13:47

最后的魁拔 发表于 2020-4-20 09:09
你这个有没有头结点呢

我是把front做为头,所以在进队的时候要isnull返回了1才能让front-> next指向元素。

摩尔曼斯克 发表于 2020-4-20 11:21:46

最后的魁拔 发表于 2020-4-20 08:41
进出队列要修改,队头和队尾,应改传入&rear,&front

谢谢大佬,只需要在您答案的基础上,在init那里传入2级指针就可以了{:10_297:}
页: [1]
查看完整版本: 下午要交作业,急求各位大佬!。初次将变量赋值NULL,再次使用变量时其内容不为NULL