#include <iostream>
#define maxsize 5
typedef int ElemType;
typedef struct//定义循环队列
{
ElemType data[maxsize];
int head;//队首
int rear;//队尾
}SqQueue;
void InQueue(SqQueue *&Q)//初始化循环队列
{
Q=(SqQueue *)malloc(sizeof(SqQueue));//获取空间
Q->head=Q->rear=0;//首尾为0
}
void DestoryQueue(SqQueue *&Q)
{
free(Q);
}
bool QueueEmpty(SqQueue *Q)//判断循环队列是否为空
{
if(Q->head==Q->rear)
{
return 1;
}
else
{
return 0;
}
}
bool QueueFull(SqQueue *Q)//判断循环队列是否满
{
if(Q->head==(Q->rear+1)%maxsize)
{
return 1;
}
else
{
return 0;
}
}
bool EnQueue(SqQueue *&Q,ElemType e)//入队
{
if(Q->head==(Q->rear+1)%maxsize)//判断是否队满
{
return 0;
}
else
{
Q->data[Q->rear]=e;
Q->rear=(Q->rear+1)%maxsize;//将队首移到下一位,或循环到第0位,当rear+1==maxsize的时候通过模运算会到第0位
}
}
bool DeQueue(SqQueue *&Q,ElemType &e)//出队
{
if(Q->head==Q->rear)//判断是否队空
{
return 0;
}
else
{
e=Q->data[Q->head];
Q->head=(Q->head+1)%maxsize;//将队首移到下一位,或循环到第0位,当head+1==maxsize的时候通过模运算会到第0位
return 1;
}
}
bool GetQueue(SqQueue *&Q,ElemType &e)
{
if(Q->head==Q->rear)//判断是否队空
{
return 0;
}
else
{
e=Q->data[Q->head];
return 1;
}
}
int main()
{
SqQueue *Q;
InQueue(Q);
ElemType e;
printf("初始化一个有五个空位的循环队列\n");
printf("将12345按顺序放入队列中\n");
EnQueue(Q,1);
EnQueue(Q,2);
EnQueue(Q,3);
EnQueue(Q,4);
EnQueue(Q,5);
printf("判断队是否为空:%d\n",QueueEmpty(Q));
printf("判断队是否为满:%d\n",QueueFull(Q));
printf("出队\n");
DeQueue(Q,e);
printf("出队元素为%d\n",e);
printf("取队首元素\n");
GetQueue(Q,e);
printf("队首元素为%d\n",e);
printf("摧毁队列\n");
printf("判断队是否为空:%d\n",QueueEmpty(Q));
}
没见你销毁队列啊,DestoryQueue函数你也每调用,你如果调用了DestoryQueue,你最后printf("判断队是否为空:%d\n",QueueEmpty(Q));这里会崩的。