C語言 隊列(循環隊列)實現

循環隊列:頭尾相接的順序存儲成爲循環隊列

滿隊列的判斷
辦法一:設置一個標誌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;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章