循環隊列:頭尾相接的順序存儲成爲循環隊列
滿隊列的判斷
辦法一:設置一個標誌flag,當front == rear 且 flag = 0 爲空隊列當 front == rear 且 flag = 1 爲滿隊列(煩瑣)
辦法二:
滿隊列時,數組中還存在一個空閒單元(簡單)
滿隊列的條件是**(rear + 1)%QueueSize == front**
判斷隊列滿,採用第二種方法
隊列長度公式爲**(rear - front + QueueSize)%QueueSize**
循環隊列數據結構
typedef int Status;
typedef int QElemType;
define MAXSIZE 100
typedef struct
{
QElemType data[MAXSIZE];
int front;
int rear;
}SqQueue;
初始化一個隊列
Status InitQueue(SqQueue *Q)
{
Q->front =0;
Q->rear = 0;
return OK;
}
循環隊列長度
int QueueLength(SqQueue Q)
{
return (Q.rear - Q.font + MAXSIZE)%MAXSIZE;
}
循環隊列的入隊
Status EnQueue(SqQueue *Q,QElemType e)
{
if((Q->rear + 1)%MAXSIZE == Q->front)
return ERROR;
Q->data[Q->rear] = e;
Q->rear = (Q->rear + 1)%MAXSIZE;
return OK;
}
循環隊列的出隊
Status DeQueue(SqQueue *Q,QElemType *e)
{
if(Q->front == Q->rear)
return ERROR;
*e = Q->data[Q->front];
Q->front = (Q->font +1)%MAXSIZE;//
return OK;
}