设计一个循环队列QUEUE<T>,用data[0..MaxSize-1]存放队列元素,用front和rear分别作为队头和队尾指针,另外用一个标志tag标识队列可能空(false)或可能满(true),这样加上front==rear可以作为队空或队满的条件。要求设计队列的相关基本运算算法。
#include<stdio.h>
#include <corecrt_malloc.h>
#define MAXSIZE 5
typedef struct {
//const static int MAXSIZE = 5;
int data[MAXSIZE];
int front, rear, tag;
}Queue;
void InitQueue(Queue* queue) {
queue->front = 0;
queue->rear = 0;
queue->tag = 0;
}
int QueueEmpty(Queue *queue) {
return(queue->front == queue->rear && queue->tag == 0);
}
void DestroyQueue(Queue *queue) {
free(queue);
}
int enQueue(Queue* queue, int a) {
if (queue->front == queue->rear && queue->tag == 1) {
return 0;
}
queue->rear = (queue->rear + 1) % MAXSIZE;
queue->data[queue->rear] = a;
queue->tag = 1;
return 1;
}
int deQueue(Queue* queue, int* a) {
if (queue->front == queue->rear && queue->tag == 0) {
return 0;
}
*a = queue->data[queue->front + 1];
queue->front = (queue->front + 1) % MAXSIZE;
queue->tag = 0;
return 1;
}