資料結構與演算法(9) 鏈隊

2021-04-09 06:49:09 字數 2036 閱讀 3970

資料結構與演算法(9)—鏈隊

(mi6236)

2、鏈隊

2.1、鏈隊的儲存結構

佇列的鏈結實現稱為鏈隊,鏈隊實際上是乙個同時帶有頭指標和尾指標的單鏈表。頭指標指向隊頭結點,尾指標指向隊尾結點即單鏈表的最後乙個結點。

佇列以鍊錶形式出現,鏈首結點為隊頭,鏈尾結點為隊尾。

隊頭指標為lq->front,隊尾指標為lq->rear,隊頭元素的引用為q->front->data,隊尾元素的引用為lq->rear->data.

初始化時,設定lq->front=lq->rear=null.

進隊操作,與鍊錶中鏈尾插入操作一樣:出隊操作,與鍊錶中鏈首刪除操作一樣。

隊空的條件為lq->front==null.

2.3、鏈佇列基本函式演算法描述

注:以下程式在vc6.0+win98下測試通過。

#include

#include

typedef int elemtype;

typedef struct qnodeqnode,*queueptr;

typedef structlqueue;

/*佇列初始化*/

void initqueue(lqueue *lq)

/*入隊*/

void inqueue(lqueue*lq,elemtype e)

}

/*出隊*/

int outqueue(lqueue *lq,elemtype *e)

s=lq->front;

*e=s->data;

if(lq->rear==lq->front)/*原佇列中僅有乙個結點,刪除後佇列變空*/

lq->rear=lq->front=null;

else

lq->front=lq->front->next;

free(s);

return1;

}

/*判空*/

int queueempty(lqueue *lq)

/*顯示佇列中的所有元素*/

void showqueue(lqueue lq)

}

/*取隊首元素*/

getqueue(lqueue *lq,elemtype *e)

}

/*清佇列*/

void clearqueue(lqueue *lq)

lq->rear=lq->front=null;

}

int main()

2.4、迴圈佇列的優點是:其可以克服順序佇列的「假上溢」現象,能夠使儲存佇列的向量空間得到充分的利用。判別迴圈佇列的「空」或「滿」不能以頭尾指標是否相等來確定,一般是通過以下幾種方法:一是另設變數來區別佇列的空和滿;二是少用乙個元素的空間。每次入隊前測試入隊後頭尾指標是不會重合,如果會重合就認為佇列已滿;三是設定一計數器記錄佇列中元素總數,不僅可以判別空或滿,還可以得到佇列中元素的個數。

2.5、佇列的順序儲存結構和鏈式儲存結構的區別

佇列的順序儲存結構是利用一組位址連續的儲存單元依次存放佇列中的資料元素。一般情況下,用一維陣列來作為佇列的順序儲存空間,並且兩個指示器front和rear分別指向隊頭元素位置和隊尾元素位置。

佇列的鏈結實現是乙個同時帶有頭指標和尾指標的受限單鏈表。頭指標指向隊頭結點,尾指標指向隊尾結點即單鏈表的最後乙個結點。

2.7、佇列的應用非常廣泛,如鍵盤的輸入緩衝區的儲存結構(迴圈佇列)及作業佇列等。佇列也可用於遞迴的非遞迴轉化。例如:若有乙個分時系統,其中一台計算機連線著四個終端,即允許四個使用者同時使用這一台計算機。則計算機系統必須設立乙個佇列,用以管理各終端使用者使用cpu的請求。當某個使用者要求使用cpu時,相應的終端代號就入隊,而隊頭的終端使用者則是cpu當前服務的物件。一種比較簡單的情況是:對於當前使用者(隊首),系統每次分配乙個時間片的時間間隔,在乙個時間片內,如果當前使用者的作業沒有結束,則該終端使用者的代號出隊後重新入隊,插入隊尾,等待下一次cpu服務。如果某個使用者的作業執行結束,則先退出,出隊後不再入隊,整個執行過程就是各終端代號不斷地入隊、出隊,cpu輪流地為n(n<=4)個終端使用者服務。由於計算機的執行速度極快,所以,對於每個終端使用者來說,似乎計算機是單獨在為其服務。

資料結構 鏈隊(C C 版)

本文為csdn博主coder gxd原創 include 函式malloc free 所在標頭檔案 本文鏈隊為不含頭結點的鏈隊 定義鏈隊結點 typedef struct qnode qnode 定義鏈隊型別 typedef struct liqueue 初始化鏈隊,時間複雜度為o 1 建立鏈隊,並...

資料結構知識整理 鏈隊

初始化 入隊 出隊 取隊頭元素 棧和佇列是兩種重要的線性結構,與一般線性表不同,它們是操作受限的特殊線性表,主要用於輔助其他資料結構的操作和處理,基本不用於儲存資料元素資訊。佇列 queue 是一種先進先出 first in first out,fifo 的線性表。它只允許在表的一端插入,而在表的另...

資料結構實驗三 鏈隊

include include stdio.h include stdlib.h using namespace std define ok 1 define error 0 define overflow 2 typedef int status typedef int qelemtype 因為要...