求指点数据结构环形队列

C语言 码拜 8年前 (2017-04-17) 991次浏览
代码在这里了,下面有两处注释就是不懂的地方了。求指点数据结构环形队列
//3-3.cpp
#include<stdio.h>
#include<malloc.h>
#define MaxSize 5
typedef char ElemType;
typedef struct{
ElemType data[MaxSize];
int front,rear;
}SqQueue;
void InitQueue(SqQueue *&q){
q=(SqQueue *)malloc(sizeof(SqQueue));
q->front=q->rear=0;
}
void DestroyQueue(SqQueue *&q){
free(q);
}
bool QueueEmpty(SqQueue *q){
return(q->front==q->rear);
}
bool enQueue(SqQueue *q,ElemType e){
if((q->rear+1)%MaxSize==q->front)
return false;
q->rear=(q->rear+1)%MaxSize;
q->data[q->rear]=e;
return true;
}
bool deQueue(SqQueue *q,ElemType &e){
if(q->front==q->rear)
return false;
e=q->data[q->front];
q->front=(q->front+1)%MaxSize;
return true;
}
int main(){
ElemType e;
SqQueue *q;
printf(“初始化队列\n”);
InitQueue(q);
printf(“依次进队列元素a,b,c\n”);
if(!enQueue(q,”a”)) printf(“\t提示:队满,不能进队\n”);
if(!enQueue(q,”b”)) printf(“\t提示:队满,不能进队\n”);
if(!enQueue(q,”c”)) printf(“\t提示:队满,不能进队\n”);
printf(“队列为%s\n”,QueueEmpty(q)?”空”:”非空”);
if(deQueue==0) printf(“队空,不能出队\n”);
else deQueue(q,e);
printf(“出队一个元素%c\n”,e);                            //这里想让a出来,但是没出来啊
printf(“依次进队列元素d,e,f\n”);
if(!enQueue(q,”d”)) printf(“\t提示:队满,不能进队\n”);
if(!enQueue(q,”e”)) printf(“\t提示:队满,不能进队\n”);
if(!enQueue(q,”f”)) printf(“\t提示:队满,不能进队\n”);
printf(“出队列序列:”);                                              //本来要显示b,c,d,e的~结果啥都没有。
while(!QueueEmpty(q)){
enQueue(q,e);
printf(“%c”,e);
}
printf(“\n”);
printf(“释放队列\n”);
DestroyQueue(q);

}

解决方案

60

deque时 q->data索引不对,具体不没细看你的代码,但发现你索引少了1
main函数中最后的while循环里应该是deQueue吧

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明求指点数据结构环形队列
喜欢 (0)
[1034331897@qq.com]
分享 (0)