#define TRUE 1
#define FALSE 0
#define SIZE 10
typedef int QueueData;
typedef struct _queue
{
QueueData data[SIZE];
int front; // 指向队头的下标
int rear; // 指向队尾的下标
}Queue;
// 置空队
int InitQueue (Queue *q)
{
if (q == NULL)
{
errno = ERROR;
return FALSE;
}
q->front = 0;
q->rear = 0;
return TRUE;
}
// 判队空否
int QueueEmpty (Queue *q)
{
if (q == NULL)
{
errno = ERROR;
return FALSE;
}
return q->front == q->rear;
}
// 判队满否
int QueueFull (Queue *q)
{
if (q == NULL)
{
errno = ERROR;
return FALSE;
}
return q->front == (q->rear+1)%SIZE;
}
// 进队
int EnQueue (Queue *q, QueueData x)
{
if (q == NULL)
{
errno = ERROR;
return FALSE;
}
if (QueueFull(q))
{
errno = FULL_QUEUE;
return FALSE;
}
q->rear = (q->rear+1) % SIZE;
q->data[q->rear] = x;
return TRUE;
}
// 出队
int DeQueue (Queue *q, QueueData *x)
{
if (q == NULL)
{
errno = ERROR;
return FALSE;
}
if (QueueEmpty(q))
{
errno = EMPTY_QUEUE;
return FALSE;
}
q->front = (q->front + 1) % SIZE;
*x = q->data[q->front];
return TRUE;
}
// 获取队头元素
int GetFront (Queue *q, QueueData *x)
{
if (q == NULL)
{
errno = ERROR;
return FALSE;
}
if (QueueEmpty(q))
{
errno = EMPTY_QUEUE;
return FALSE;
}
int index = (q->front + 1) % SIZE;
*x = q->data[index];
return TRUE;
}