數(shù)據(jù)結構基礎--鏈式隊列

鏈式隊列指的是使用鏈表來實現(xiàn)的隊列杖小,操作比較簡單

  • 定義一個鏈式隊列以及相關宏定義
#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0
#define MAXSIZE 20 /* 存儲空間初始分配量 */

typedef int Status;

typedef int QElemType; /* QElemType類型根據(jù)實際情況而定坏快,這里假設為int */

typedef struct QNode    /* 結點結構 */
{
    QElemType data;
    struct QNode *next;
}QNode,*QueuePtr;

typedef struct            /* 隊列的鏈表結構 */
{
    QueuePtr front,rear; /* 隊頭挨厚、隊尾指針 */
}LinkQueue;
  • 初始化隊列
    創(chuàng)建一個頭結點并且將將隊列的頭尾指針指向該結點
Status InitLinkQueue(LinkQueue *Q){
    //1. 頭/尾指針都指向新生成的結點
    Q->front = Q->rear = (QueuePtr)malloc(sizeof(QNode));
    //2.判斷是否創(chuàng)建新結點成功與否
    if (!Q->front) {
        return ERROR;
    }
    //3.頭結點的指針域置空
    Q->front->next = NULL;   
    return OK;
}
  • 銷毀隊列:遍歷整個隊列將遍歷的結點free
Status DestoryQueue(LinkQueue *Q){
    
    //遍歷整個隊列,銷毀隊列的每個結點
    while (Q->front) {
       //Q->rear在這個相當于一個臨時變量temp
        Q->rear = Q->front->next;
        free(Q->front);
        Q->front = Q->rear;
    }
    return OK;
    
}
  • 將隊列Q置空(清空完成后還能夠插入數(shù)據(jù))
Status ClearQueue(LinkQueue *Q){
    
    QueuePtr p,q;
    Q->rear = Q->front;
    p = Q->front->next;
    Q->front->next = NULL;
    
    while (p) {
        
        q = p;
        p = p->next;
        free(q);
        
    }
    
    return OK;
}
  • 判斷隊列是否為空
Status QueueEmpty(LinkQueue Q){
    if (Q.front == Q.rear)
        return TRUE;
    else
        return FALSE;
}
  • 獲取隊列長度
int QueueLength(LinkQueue Q){
    int i= 0;
    QueuePtr p;
    p = Q.front;
    while (Q.rear != p) {
        i++;
        p = p->next;
    }
    return i;
}

  • 入隊列:插入元素e為隊列Q的新元素

    • 為入隊元素分配結點空間,用指針s指向;
    • 將新結點s指定數(shù)據(jù)域.
    • 將新結點插入到隊尾
    • 修改隊尾指針
Status EnQueue(LinkQueue *Q,QElemType e){
    
    //為入隊元素分配結點空間,用指針s指向;
    QueuePtr s = (QueuePtr)malloc(sizeof(QNode));
    
    //判斷是否分配成功
    if (!s) {
         return ERROR;
    }
    
    //將新結點s指定數(shù)據(jù)域.
    s->data = e;
    s->next = NULL;
    
    //將新結點插入到隊尾
    Q->rear->next = s;
    
    //修改隊尾指針
    Q->rear = s;
    
    return OK;
}
  • 出隊列

  • 第一步:判斷隊列是否為空;
  • 第二步:要刪除的隊頭結點暫時存儲在p
  • 第三步:要刪除的隊頭結點的值賦值給e
  • 第四步:原隊列頭結點的后繼p->next 賦值給頭結點后繼
  • 第五步:若隊頭就是隊尾,則刪除后將rear指向頭結點
  • 第六步:free出隊的數(shù)據(jù)結點
Status DeleteQueue(LinkQueue *Q,QElemType *e){
    
    QueuePtr p;
    
    //判斷隊列是否為空;
    if (Q->front == Q->rear) {
        return ERROR;
    }
    
    //將要刪除的隊頭結點暫時存儲在p
    p = Q->front->next;
    
    //將要刪除的隊頭結點的值賦值給e
    *e = p->data;
    
    //將原隊列頭結點的后繼p->next 賦值給頭結點后繼
    Q->front->next = p ->next;
    
    //若隊頭就是隊尾,則刪除后將rear指向頭結點.
    if(Q->rear == p) Q->rear = Q->front;
    
    free(p);
    
    return OK;
}
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末需频,一起剝皮案震驚了整個濱河市巩剖,隨后出現(xiàn)的幾起案子憔古,更是在濱河造成了極大的恐慌罢坝,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,542評論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件婴削,死亡現(xiàn)場離奇詭異唉俗,居然都是意外死亡,警方通過查閱死者的電腦和手機配椭,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,822評論 3 394
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來衡楞,“玉大人,你說我怎么就攤上這事敦姻∷吕遥” “怎么了替劈?”我有些...
    開封第一講書人閱讀 163,912評論 0 354
  • 文/不壞的土叔 我叫張陵陨献,是天一觀的道長懂更。 經(jīng)常有香客問我急膀,道長龄捡,這世上最難降的妖魔是什么聘殖? 我笑而不...
    開封第一講書人閱讀 58,449評論 1 293
  • 正文 為了忘掉前任奸腺,我火速辦了婚禮,結果婚禮上帮非,老公的妹妹穿的比我還像新娘讹蘑。我一直安慰自己座慰,他們只是感情好,可當我...
    茶點故事閱讀 67,500評論 6 392
  • 文/花漫 我一把揭開白布隅忿。 她就那樣靜靜地躺著背桐,像睡著了一般蝉揍。 火紅的嫁衣襯著肌膚如雪又沾。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,370評論 1 302
  • 那天励饵,我揣著相機與錄音役听,去河邊找鬼。 笑死甜滨,一個胖子當著我的面吹牛瘤袖,可吹牛的內(nèi)容都是我干的捂敌。 我是一名探鬼主播,決...
    沈念sama閱讀 40,193評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼栏渺,長吁一口氣:“原來是場噩夢啊……” “哼磕诊!你這毒婦竟也來了纹腌?” 一聲冷哼從身側(cè)響起升薯,我...
    開封第一講書人閱讀 39,074評論 0 276
  • 序言:老撾萬榮一對情侶失蹤涎劈,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后谅海,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蹦浦,經(jīng)...
    沈念sama閱讀 45,505評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡侥袜,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,722評論 3 335
  • 正文 我和宋清朗相戀三年枫吧,在試婚紗的時候發(fā)現(xiàn)自己被綠了宇色。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,841評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖裳擎,靈堂內(nèi)的尸體忽然破棺而出思币,到底是詐尸還是另有隱情谷饿,我是刑警寧澤,帶...
    沈念sama閱讀 35,569評論 5 345
  • 正文 年R本政府宣布绸贡,位于F島的核電站听怕,受9級特大地震影響虑绵,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜声搁,卻給世界環(huán)境...
    茶點故事閱讀 41,168評論 3 328
  • 文/蒙蒙 一疏旨、第九天 我趴在偏房一處隱蔽的房頂上張望充石。 院中可真熱鬧霞玄,春花似錦、人聲如沸惰爬。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,783評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽巩掺。三九已至页畦,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間独令,已是汗流浹背燃箭。 一陣腳步聲響...
    開封第一講書人閱讀 32,918評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留瓢颅,地道東北人木人。 一個月前我還...
    沈念sama閱讀 47,962評論 2 370
  • 正文 我出身青樓形病,卻偏偏與公主長得像司恳,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子耍共,可洞房花燭夜當晚...
    茶點故事閱讀 44,781評論 2 354