佇列的實現與應用

2021-06-19 05:17:00 字數 2318 閱讀 3367

佇列是一種線性集合,其元素一端加入,從另一端刪除,因此我們說佇列元素是按先進先出(fifo)方式處理。

佇列的處理過程:通常佇列會畫成水平,其中一端作為佇列的前端(front)也稱隊首(head),另一端作為佇列的末端(rear)也稱隊尾(tail).元素都是從佇列末端進入,從佇列前端退出.

因而在佇列中,其處理過程可在佇列的兩端進行,而在棧中,其處理過程只在棧的一端進行,但兩者也有相似之處,與棧類似,佇列中也沒有操作能讓使用者「抵達」佇列中部,同樣也沒有操作允許使用者重組或刪除多個元素。(不過這些操作都可以再鍊錶中實現)

下面我們定義乙個泛型queueadt介面來表示佇列的各種操作(佇列的首要作用是儲存順序,而棧則相反是用來顛倒順序)

package

xidian.sl.queue;

import

xidian.sl.stack.emptycollectionexception;

/*** 棧的首要作用是顛倒順序,而佇列的首要作用是保持順序

* */

public

inte***ce queueadt

與棧的實現一樣,我們這裡也提供兩種實現方法:鍊錶與陣列的實現

1.鍊錶實現佇列:

佇列與棧的區別在於,我們必須要操作鍊錶的兩端。因此,除了乙個指向鍊錶首元素的引用外,還需要跟蹤另乙個指向鍊錶末元素的引用。再增加乙個整形變數count來跟蹤佇列中的元素個數。

綜合考慮,我們使用末端入列,前端出列

package

xidian.sl.queue;

import

xidian.sl.stack.emptycollectionexception;

import

xidian.sl.stack.linearnode;

public

class linkedqueueimplements queueadt

/*** 實現dequeue操作時,確保至少存在乙個可返回的元素,如果沒有,就要丟擲異常

* @throws

emptycollectionexception

* */public t dequeue() throws

emptycollectionexception

t result =front.getelement();

front =front.getnext();

count--;

//如果此時隊列為空,則要將rear引用設定為null,front也為null,但由於front設定為鍊錶的next引用,已經有處理

if(isempty())

return

result;

}/*** enqueue操作要求將新元素放到鍊錶的末端

* 一般情況下,將當前某元素的next引用設定為指向這個新元素,並重新把rear引用設定為指向這個新新增的末元素,但是,如果佇列

* 目前為空,則front引用也要設定為指向這個新元素

* */public

void

enqueue(t element)

else

rear =node;

count++;

}@override

public

t first()

@override

public

boolean

isempty()

@override

public

intsize()

}

這裡使用到的linearnode類與在棧中使用到的是一樣的:

package

xidian.sl.stack;

/*** 節點類,含有另個引用,乙個指向鍊錶的下乙個linearnode節點,

* 另乙個指定本節點中儲存的元素

* */

public

class linearnode

/*建立乙個儲存了特殊元素的節點

*/public

linearnode(t elem)

/*返回下乙個節點

*/public linearnodegetnext()

/*設定下乙個節點

*/public

void setnext(linearnodenode)

/*獲得當前節點儲存的元素

*/public

t getelement()

/*設定當前節點儲存的元素

*/public

void

setelement(t element)

}

佇列的操作與實現 迴圈佇列

由於順序佇列有 假溢位 的缺點,所以在應用中,運用更多的是迴圈佇列來實現佇列的順序儲存。由於引用傳引數,所以原始檔需要.cpp字尾,即c 檔案儲存。迴圈佇列的判空條件為 q.rear q.fornt 迴圈佇列的判讀隊滿的條件是 q.rear 1 maxsize q.fornt 下面是佇列實現的儲存型...

佇列的基本操作與應用

一 實驗目的 1 掌握鏈式儲存佇列的進隊和出隊等基本操作 2 了解佇列的應用 二 實驗環境 硬體環境要求 pc機 單機 使用的軟體名稱 版本號以及模組 vs2010或visual c 6.0或win tc等。三 實驗內容 1 編寫乙個程式,實現鏈隊的各種基本運算 假設佇列中元素型別為char 並在此...

佇列應用及C實現

佇列 fifo 一種資料結構,特點先入先出。應用比如訊息處理等,訊息無法第一時間響應,先將訊息入隊,順序執行。佇列實現基本步驟 建立 刪除 入隊 出隊。複雜邏輯也是基於基本形式擴充套件。簡單陣列實現 include include include define true 1 define false...