代码在这里了,下面有两处注释就是不懂的地方了。
//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);
//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吧
main函数中最后的while循环里应该是deQueue吧