c语言数据结构循环队列问题

#include<stdio.h>#include<stdlib.h>#definemaxsize12typedefstructNode{intdata[maxsize]... #include<stdio.h>
#include<stdlib.h>
#define maxsize 12

typedef struct Node
{
int data[maxsize];
int front;
int rear;
}CircQueue;

CircQueue *InitQueue(){
CircQueue *q;
q->front = 0;
q->rear = 0;
return q;
}

CircQueue *EnQueue(CircQueue *q){
int i;
int x;
printf("请输入队列元素:\n");
for(i = 0;i < 3;i++){
if((q->rear+1)%maxsize==q->front){
printf("队满!!!");
}else{
scanf("%d",&x);
q->rear = (q->rear+1)%maxsize;
q->data[q->rear] = x;
}
}
return q;
}

void PrintQueue(CircQueue *q){

while(q->front!=q->rear){
q->front = (q->front+1)%maxsize;
printf("%d ",q->data[q->front]);
}
}

main(){
CircQueue *q;

q = InitQueue();

q = EnQueue(q);

PrintQueue(q);
return 0;
}
编译没有问题,输出有点问题・_・?
展开
 我来答
duanggi
2019-05-23 · TA获得超过196个赞
知道小有建树答主
回答量:240
采纳率:87%
帮助的人:143万
展开全部

主要错在InitQueue函数里面。当声明一个指针的时候,除了指针本身占用的内存以外,是不会分配具体的内存空间的。也就是说,如果只是CircQueue *q;声明指针q,然后直接使用它的内部成员q->front,q->rear = 0是不合法的。实际上,在Visual Studio里面是编译不通过的。

修改后运行截图

CircQueue *InitQueue() {
CircQueue *q = (CircQueue*)malloc(sizeof(CircQueue));
q->front = 0;
q->rear = 0;
return q;
}
追问
感谢!
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式