c
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define IBFEASIBLE -1
#define OVERFLOW -2
typedef int Status;
#define nullE -999
typedef int ElemType;
typedef struct {
ElemType *base;
int front;
int rear;
int size;
} *SqQueue;
SqQueue InitQueue(int size) {
SqQueue Q;
if (!(Q = (SqQueue)malloc(sizeof(*Q)))) exit(OVERFLOW);
if (!(Q->base = (ElemType*)calloc(size, sizeof(ElemType)))) exit(OVERFLOW);
Q->front = Q->rear = 0; Q->size = size;
return Q;
}
Status ClearQueue(SqQueue Q) {
if (!Q) return ERROR;
Q->front = Q->rear; return OK;
}
SqQueue FreeQueue(SqQueue Q) {
if (Q) { free(Q->base); free(Q); }
return NULL;
}
int QueueLen(SqQueue Q) {
if (!Q) return -1;
return (Q->rear - Q->front + Q->size) % Q->size;
}
Status EnQueue(SqQueue Q, ElemType e) {
if (!Q || (Q->rear+1) % Q->size == Q->front)
return ERROR;
Q->base[Q->rear] = e;
Q->rear = (Q->rear + 1) % Q->size;
return OK;
}
ElemType DeQueue(SqQueue Q) {
if (!Q || Q->front == Q->rear) return nullE;
ElemType e = Q->base[Q->front];
Q->front = (Q->front + 1) % Q->size;
return e;
}