鱼C论坛

 找回密码
 立即注册
查看: 780|回复: 5

[已解决]下午要交作业,急求各位大佬!。初次将变量赋值NULL,再次使用变量时其内容不为NULL

[复制链接]
发表于 2020-4-20 08:14:44 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本人小白,本想做一个链队,但是出了点问题。
代码如下:
#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的判断语句,结果如下:(搞不了图片
error1error1error2error2
也就是没有error0,就是刚开始lq->next = NULL;是成功了的,但是后面再次调用的时候他又不为NULL了。
求问大佬怎么解决下午要交作业
最佳答案
2020-4-20 08:41:49
进出队列要修改,队头和队尾,应改传入&rear,&front
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-4-20 08:41:49 | 显示全部楼层    本楼为最佳答案   
进出队列要修改,队头和队尾,应改传入&rear,&front
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-20 09:03:49 | 显示全部楼层
最后的魁拔 发表于 2020-4-20 08:41
进出队列要修改,队头和队尾,应改传入&rear,&front

嗯嗯,谢谢大佬解答,修改后程序可以运行了。
但是那里isnull返回不了1,也就是enqueue那里入不了第一个元素,这样出队的时候front->next没有值。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-20 09:09:57 | 显示全部楼层
你这个有没有头结点呢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-20 09:13:47 | 显示全部楼层
最后的魁拔 发表于 2020-4-20 09:09
你这个有没有头结点呢

我是把front做为头,所以在进队的时候要isnull返回了1才能让front-> next指向元素。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-20 11:21:46 | 显示全部楼层
最后的魁拔 发表于 2020-4-20 08:41
进出队列要修改,队头和队尾,应改传入&rear,&front

谢谢大佬,只需要在您答案的基础上,在init那里传入2级指针就可以了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-15 06:56

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表