为了账号安全,请及时绑定邮箱和手机立即绑定

代码如下,输出没有什么大的问题就是会弹出一个错误黑色的提示框?

代码如下,输出没有什么大的问题就是会弹出一个错误黑色的提示框?

C++ C
皈依舞 2022-08-05 10:10:24
#include <stdio.h>#include <malloc.h>#include <stdlib.h>typedef int QElemType;typedef struct QNode {QElemType data;struct QNode *next;}QNode;typedef struct{QNode *front,*rear;}LinkQueue;void enQueue(LinkQueue *Q, QElemType e);/*入队列操作*/void delQueue(LinkQueue *Q,QElemType *e);/*出队列操作*/void printQueue(LinkQueue *Q);/*依次输出队列*/main(){LinkQueue *myQueue;QNode *s;QElemType elem;myQueue=(LinkQueue *)malloc(sizeof(LinkQueue));s=(QNode *)malloc(sizeof(QNode));s->next=NULL;myQueue->front=myQueue->rear=s;enQueue(myQueue,5);enQueue(myQueue,7);enQueue(myQueue,9);delQueue(myQueue, &elem);printf("出队列的元素为:%d\n",elem);printQueue(myQueue);}void enQueue(LinkQueue *Q, int e)/*入队列操作*/{QNode *s;s=(QNode *)malloc(sizeof(QNode));s->data=e;s->next=NULL;Q->rear->next=s;Q->rear=s;}void delQueue(LinkQueue *Q, int *e)/*出队列操作,将删除的结点值保存在参数*e中*/{ QNode *s;if(Q->front==Q->rear){printf("队列为空!");exit(1);}s=Q->front->next;*e=s->data;Q->front->next=Q->front->next->next;free(s);}void printQueue(LinkQueue *Q)/*依次输出队列*/{if(Q->front==Q->rear){printf("队列为空");exit(1);}while(Q->front!=Q->rear)/*老师告诉我说是这里的while是死循环,为什么是死循环呢,不是很懂,请细说。请帮我改为正确的代码,谢谢。*/{printf("%d, ", Q->front->next->data);Q->front->next=Q->front->next->next;}exit(0);}
查看完整描述

2 回答

?
慕无忌1623718

TA贡献1744条经验 获得超4个赞

 黑色的提示框是程序运行结果窗口,不是错误的窗口

  代码错误说明如下:


while(Q->front!=Q->rear)//在本循环体之中,Q->front Q->rear的值始终没有变化//故而在这里肯定是一个死循环{    printf("%d,  ", Q->front->next->data);    Q->front->next=Q->front->next->next;}//改正后的代码如下:QNode* s = Q->front;while(s!=Q->rear){    printf("%d,  ", s->data);    s=s->next;}

  另外,所有的函数当中不应该有exit

  exit是一个系统函数,表示结束程序,而不是退出函数

  如果需要退出函数可以使用return来达到该目的


查看完整回答
反对 回复 2022-08-08
?
POPMUISE

TA贡献1765条经验 获得超5个赞

你的代码是想把front到rear的值全部输出
但是你下面的操作自己检查一下没有改变front的值,也没有改变rear的值,所以front!=rear是死循环
如果好一点的话
void printQueue(LinkQueue *Q)/*依次输出队列*/
{
if(Q->front==Q->rear)
{
printf("队列为空");
exit(1);
}
while(Q->front!=Q->rear)/*老师告诉我说是这里的while是死循环,为什么是死循环呢,不是很懂,请细说。请帮我改为正确的代码,谢谢。*/
{

printf("%d, ", Q->front->data);
Q->front=Q->front->next;
}
//exit(0);
}试试可不可以


查看完整回答
反对 回复 2022-08-08
  • 2 回答
  • 0 关注
  • 169 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号