数据结构c语言版,出队入队及依次输出一个队列的操作。
代码如下,输出没有什么大的问题就是会弹出一个错误黑色的提示框。#include<stdio.h>#include<malloc.h>#include<stdlib.h>t...
代码如下,输出没有什么大的问题就是会弹出一个错误黑色的提示框。
#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);
} 展开
#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个回答
展开全部
黑色的提示框是程序运行结果窗口,不是错误的窗口
代码错误说明如下:
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来达到该目的
展开全部
你的代码是想把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);
}试试可不可以,不行再追问
但是你下面的操作自己检查一下没有改变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);
}试试可不可以,不行再追问
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询