#pragma once
#include<iostream>
#include<assert.h>
using namespace std;
#define MAXSIZE 20
typedef int ElemType;
typedef struct Queue
{
ElemType *base;
int front;
int rear;
}Queue;
bool IsEmpty(Queue *q)
{
return q->front==q->rear;
}
bool IsFull(Queue *q)
{
return (q->rear+1)%MAXSIZE==q->front;
}
void InitQueue(Queue *q)
{
q->base=(ElemType *)malloc(sizeof(ElemType)*MAXSIZE);
assert(q->base!=0);
q->front=q->rear=0;
}
bool EnQueue(Queue *q, ElemType x)
{
if(IsFull(q))
{
cout<<"队已满"<<x<<"不能入队"<<endl;
return false;
}
q->base[q->rear]=x;
q->rear=(q->rear+1)%MAXSIZE;
return true;
}
bool DeQueue(Queue *q, ElemType *v)
{
if(IsEmpty(q))
{
cout<<"队已空,不能出队"<<endl;
return false;
}
*v=q->base[q->front];
q->front=(q->front+1)%MAXSIZE;
return true;
}
void Show(Queue *q)
{
for(int i=q->front; i!=q->rear;)
{
cout<<q->base[i]<<" ";
i = (i+1)%MAXSIZE;
}
cout<<endl;
}
void DestroyQueue(Queue *q)
{
q->front=q->rear=0;
free(q->base);
q->base=NULL;
}
void ClearQueue(Queue *q)
{
q->front=q->rear;
}
循环队列中控制循环的i不能直接写成i++,要写i=(i+1)%MAXSIZE;