typedef struct {
	ElemType data[MAXSIZE];
	int front, rear;
}SqQueue;
初始化
void InitQueue(SqQueue*& q)
{
	q = (SqQueue*)malloc(sizeof(SqQueue));
	q->front = -1;
	q->rear = -1;
}
销毁
void DestroyQueue(SqQueue*& q)
{
	free(q);
}
判断队列是否为空
bool QueueEmpty(SqQueue* q)
{
	return (q->front == q->rear);
}
进队
bool enQueue(SqQueue*& q, ElemType e)
{
	if (q->rear == MAXSIZE - 1)
		return false;
	q->rear++;
	q->data[q->rear] = e;
	return true;
}
出队
bool  deQueue(SqQueue*& q, ElemType& e)
{
	if (q->front == q->rear)
		return false;
	q->front++;
	e = q->data[q->front];
	return true;
}
环形队列
环形队列①
typedef struct {
	ElemType data[MAXSIZE];
	int front, rear;
}SqQueue1;
初始化
void InitQueue1(SqQueue1*& q)
{
	q = (SqQueue1*)malloc(sizeof(SqQueue1));
	q->front = q->rear = 0;
}
销毁
void DestroyQueue1(SqQueue1*& q)
{
	free(q);
}
判断是否为空
bool QueueEmpty(SqQueue1* q)
{
	return (q->front == q->rear);
}
进队
bool enQueue1(SqQueue1*& 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 delQueue(SqQueue1*& q, ElemType& e)
{
	if (q->rear == q->front)
		return false;
	q->front = (q->front + 1) % MAXSIZE;
	e = q->data[q->front];
	return true;
}
环形队列②
typedef struct {
	ElemType data[MAXSIZE];
	int front;
	int count;
}SqQueue2;
初始化
void InitQueue2(SqQueue2*& qu)
{
	qu = (SqQueue2*)malloc(sizeof(SqQueue2));
	qu->front = 0;
	qu->count = 0;
}
判断队列是否为空
bool QueueEmpty2(SqQueue2* qu)
{
	return (qu->count == 0);
}
进队
bool enQueue2(SqQueue2*& qu, ElemType e)
{
	int rear;
	if (qu->count == MAXSIZE)
		return false;
	
	rear = (qu->front + qu->count) % MAXSIZE;
	rear = (rear + 1) % MAXSIZE;
	qu->data[rear] = e;
	qu->count--;
	return true;
}
出队
bool delQueue(SqQueue2*& qu, ElemType& e)
{
	if (qu->count == 0)
		return false;
	qu->front = (qu->front + 1) % MAXSIZE;
	e = qu->data[qu->front];
	qu->count--;
	return true;
}
原文:https://www.cnblogs.com/KIROsola/p/11350246.html