鱼C论坛

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

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

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

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

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

x
本人小白,本想做一个链队,但是出了点问题。
代码如下:
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. typedef struct linkqueue
  4. {
  5.         char Q;
  6.         struct linkqueue *next;
  7. }linkqueue;
  8. void initqueue(linkqueue *lq)
  9. {
  10.         lq = (linkqueue*)malloc(sizeof(struct linkqueue));
  11.         lq->next = NULL;
  12.         if(lq->next)
  13.         {
  14.                 printf("error0");
  15.         }
  16. }
  17. void enqueue(linkqueue *front,linkqueue *rear,linkqueue *lq,char x)
  18. {
  19.         lq = (linkqueue*)malloc(sizeof(struct linkqueue));
  20.         if(front->next)
  21.         {
  22.                 printf("error1");
  23.         }
  24.         if(rear->next)
  25.         {
  26.                 printf("error1");
  27.         }
  28.         if(isnull(front,rear))
  29.         {
  30.                 front->next = lq;
  31.                 rear->next = lq;
  32.                 lq->Q = x;
  33.                 lq->next = NULL;
  34.         }
  35.         else
  36.         {
  37.                 lq->next = rear->next;
  38.                 lq->Q = x;
  39.                 rear->next = lq;
  40.         }
  41. }
  42. void dequeue(linkqueue *front,linkqueue *rear)
  43. {
  44.         if(isnull(front,rear))
  45.         {
  46.                 printf("队列为空!");
  47.         }
  48.         else
  49.         {
  50.                 linkqueue *q = front;
  51.                 front = front->next;
  52.                 printf("出栈元素为:%c",front->Q);
  53.                 free(q);
  54.         }
  55. }
  56. int isnull(linkqueue *front,linkqueue *rear)
  57. {
  58.         if(front->next)
  59.         {
  60.                 printf("error2");
  61.         }
  62.         if(rear->next)
  63.         {
  64.                 printf("error2");
  65.         }
  66.         if(front->next&&rear->next)
  67.         {
  68.                 return 1;
  69.         }
  70.         if(front->next == rear)
  71.         {
  72.                 return 1;
  73.         }
  74.         else
  75.         {
  76.                 return 0;
  77.         }
  78. }
  79. int main()
  80. {
  81.         linkqueue *front,*rear,*lq;
  82.         char x;
  83.         int i;
  84.         initqueue(front);
  85.         initqueue(rear);
  86.         for(i=0;i<5;i++)
  87.         {
  88.                 enqueue(front,rear,lq,'a'+i);
  89.         }
  90.         while(isnull(front,rear))
  91.         {
  92.                 dequeue(front,rear);
  93.         }
  94. }
复制代码

实际操作时,入栈操作那里没有执行,调试的时候发现在第一次执行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, 2024-3-29 02:29

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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