隊列的順序存儲實現(xiàn)

隊列是和堆棧一樣是一種特殊的線性表,和堆棧不一樣的地方是是,堆棧是以后進先出的的數(shù)據(jù)組織方式,而隊列則正好相反先進先出的組織方式.

隊列又分為兩種隊列,一種是單向隊列,一種是雙向隊列.
同時,單向隊列又可以衍生出單向循環(huán)隊列.

一般我們選用順序存儲來實現(xiàn)隊列的時候,都是構(gòu)造循環(huán)隊列,這樣可以提高內(nèi)存空間的利用率.

下面我們來用數(shù)組實現(xiàn)一個單向循環(huán)隊列.

#include <stdio.h>
#include <stdlib.h>
#define MAX_SIZE  9

typedef int ElementType;

struct QNode{
    ElementType data[MAX_SIZE];
    int front;
    int rear;
};

typedef struct QNode* Queue;



/**
 * 入隊
 * @param ptrQ
 * @param e
 */
void AddQ(Queue ptrQ , ElementType e){
    //加1求余表示轉(zhuǎn)了一周了,例如我們有9個元素,當(dāng)我們的front=0的時候,我們的rear =8;
    //此時表示隊列已經(jīng)滿了,我們不能再添加元素了,那么如何判斷呢,我們知道(rear=8)+1等于9%9 = 0 = front;
    //同樣當(dāng)我們賺了一周之后,front = 3, rear = 2; 2+1 = 3 %9 = 3 = front ,因此這樣是可以判斷的
    if((ptrQ->rear+1)%MAX_SIZE == ptrQ->front){
        printf("隊列已滿\n");
        return;
    }
    ptrQ->rear = (ptrQ->rear+1) % MAX_SIZE;
    ptrQ->data[ptrQ->rear] = e;
}

/**
 * 出隊
 * @param ptrQ
 * @param e
 * @return
 */
int deleteQ(Queue ptrQ,ElementType *e){
    if(ptrQ->rear == ptrQ->front){
        printf("隊列已空\n");
        return -1;
    }else{
        *e = ptrQ->data[ptrQ->front];
        ptrQ->front = (ptrQ->front+1) % MAX_SIZE;
        return 0;
    }
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,540評論 19 139
  • 梔椏閱讀 262評論 0 5
  • 對反面人物的真實描寫。壞人也動容,一部寬容的劇就如一個寬容的老者,他的海納百川讓我們在為各類人物感傷喈呼之時更增添...
    是捂臉怪呀閱讀 323評論 0 1
  • 我想說的↓ 努力按自己的意愿過一生……… 晚安^O^
    JJFN葉子閱讀 129評論 1 0

友情鏈接更多精彩內(nèi)容