五挨厚、棧和隊(duì)列(二)堡僻、隊(duì)列

數(shù)據(jù)結(jié)構(gòu)目錄

1.定義

隊(duì)列(queue)是只允許在一端進(jìn)行插入操作,而在另一端進(jìn)行刪除操作的線性表疫剃。

  • 與棧相反钉疫,隊(duì)列是一種先進(jìn)先出(First In First Out,FIFO)的線性表
  • 與棧相同的是,隊(duì)列也是一種重要的線性結(jié)構(gòu)巢价,實(shí)現(xiàn)一個(gè)隊(duì)列同樣需要順序表或鏈表作為基礎(chǔ)
隊(duì)列

2.隊(duì)列的鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)

隊(duì)列既可以用鏈表實(shí)現(xiàn)牲阁,也可以用順序表實(shí)現(xiàn)。跟棧相反的是壤躲,棧一般我們用順序表來實(shí)現(xiàn)城菊,而隊(duì)列我們常用鏈表來實(shí)現(xiàn),簡(jiǎn)稱為鏈隊(duì)列

typedef struct QNode{
    ElemType data;
    struct QNode *next;
}QNode,*QueuePtr;

typedef struct LinkQueue{
    QueuePtr front,rear;//隊(duì)頭碉克、尾指針
}LinkQueue;

我們將隊(duì)頭指針指向鏈隊(duì)列的頭結(jié)點(diǎn),而隊(duì)尾指針指向終端結(jié)點(diǎn)凌唬。(注:頭結(jié)點(diǎn)不是必要的,但我們加上后操作更方便)


隊(duì)列

空隊(duì)列時(shí)漏麦,front和rear都指向頭結(jié)點(diǎn)

空隊(duì)列

(1)創(chuàng)建一個(gè)隊(duì)列

創(chuàng)建一個(gè)隊(duì)列要完成兩個(gè)任務(wù):

  1. 創(chuàng)建頭結(jié)點(diǎn)
  2. 將隊(duì)列的頭指針和尾指針都指向頭結(jié)點(diǎn)客税,生成空隊(duì)列
Status initQueue(LinkQueue *q){
    q->front = (QueuePtr)malloc(sizeof(QNode));
    if (!q->front) {
        return ERROR;
    }
    q->rear = q->front;
    q->rear->next = NULL;
    return OK;
}

(2) 入隊(duì)列操作

入隊(duì)列操作

如圖所示,入隊(duì)列就是在隊(duì)尾插入一個(gè)新的結(jié)點(diǎn)

Status insertQueue(LinkQueue *q,ElemType e){
    QueuePtr p = (QueuePtr)malloc(sizeof(QNode));
    if (!p) {
        return ERROR;
    }
    p->data = e;
    p->next = NULL;
    q->rear->next = p;
    q->rear = p;
    
    return OK;
}

(3)出隊(duì)列操作

出隊(duì)列操作是將隊(duì)列中的第一個(gè)元素移出撕贞,隊(duì)頭指針不發(fā)生改變更耻,改變頭結(jié)點(diǎn)的next指針即可


出隊(duì)列操作

如果原隊(duì)列只有一個(gè)元素,那么我們就應(yīng)該處理一下隊(duì)尾指針麻掸,讓它指向頭結(jié)點(diǎn)


處理一個(gè)元素的情況
Status deleteQueue(LinkQueue *q,ElemType *e){
    if (q->rear == q->front) {
        //隊(duì)尾和隊(duì)頭指向相同酥夭,表示空隊(duì)列
        return ERROR;
    }
    QueuePtr p = q->front->next;
    //返回值
    *e = p->data;
    
    //頭結(jié)點(diǎn)指向下一個(gè)元素
    q->front->next = p->next;
    if (q->rear == p) {
        //只有一個(gè)元素的隊(duì)列
        q->rear = q->front;
    }
    free(p);
    return OK;
}

(4)銷毀一個(gè)隊(duì)列

由于鏈隊(duì)列建立在內(nèi)存的動(dòng)態(tài)區(qū),因此當(dāng)一個(gè)隊(duì)列不再有用時(shí)應(yīng)當(dāng)把它及時(shí)銷毀掉脊奋,以免過多的占用內(nèi)存空間

Status destroyQueue(LinkQueue *q){
    while (q->front) {
        QueuePtr p = q->front;
        q->front = q->front->next;
        free(p);
    }
    q->front = q->rear = NULL;
    return OK;
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末熬北,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子诚隙,更是在濱河造成了極大的恐慌讶隐,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,651評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件久又,死亡現(xiàn)場(chǎng)離奇詭異巫延,居然都是意外死亡效五,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,468評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門炉峰,熙熙樓的掌柜王于貴愁眉苦臉地迎上來畏妖,“玉大人,你說我怎么就攤上這事疼阔〗浣伲” “怎么了?”我有些...
    開封第一講書人閱讀 162,931評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵婆廊,是天一觀的道長(zhǎng)迅细。 經(jīng)常有香客問我,道長(zhǎng)淘邻,這世上最難降的妖魔是什么茵典? 我笑而不...
    開封第一講書人閱讀 58,218評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮宾舅,結(jié)果婚禮上统阿,老公的妹妹穿的比我還像新娘。我一直安慰自己贴浙,他們只是感情好砂吞,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,234評(píng)論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著崎溃,像睡著了一般。 火紅的嫁衣襯著肌膚如雪盯质。 梳的紋絲不亂的頭發(fā)上袁串,一...
    開封第一講書人閱讀 51,198評(píng)論 1 299
  • 那天咽筋,我揣著相機(jī)與錄音谦去,去河邊找鬼。 笑死薄声,一個(gè)胖子當(dāng)著我的面吹牛王悍,可吹牛的內(nèi)容都是我干的破镰。 我是一名探鬼主播,決...
    沈念sama閱讀 40,084評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼压储,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼鲜漩!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起集惋,我...
    開封第一講書人閱讀 38,926評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤孕似,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后刮刑,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體喉祭,經(jīng)...
    沈念sama閱讀 45,341評(píng)論 1 311
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡养渴,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,563評(píng)論 2 333
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了泛烙。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片理卑。...
    茶點(diǎn)故事閱讀 39,731評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖蔽氨,靈堂內(nèi)的尸體忽然破棺而出傻工,到底是詐尸還是另有隱情,我是刑警寧澤孵滞,帶...
    沈念sama閱讀 35,430評(píng)論 5 343
  • 正文 年R本政府宣布中捆,位于F島的核電站,受9級(jí)特大地震影響坊饶,放射性物質(zhì)發(fā)生泄漏泄伪。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,036評(píng)論 3 326
  • 文/蒙蒙 一匿级、第九天 我趴在偏房一處隱蔽的房頂上張望蟋滴。 院中可真熱鬧,春花似錦痘绎、人聲如沸津函。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,676評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽尔苦。三九已至,卻和暖如春行施,著一層夾襖步出監(jiān)牢的瞬間允坚,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,829評(píng)論 1 269
  • 我被黑心中介騙來泰國打工蛾号, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留稠项,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,743評(píng)論 2 368
  • 正文 我出身青樓鲜结,卻偏偏與公主長(zhǎng)得像展运,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子精刷,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,629評(píng)論 2 354