佇列是一種線性集合,其元素一端加入,從另一端刪除,因此我們說佇列元素是按先進先出(fifo)方式處理。
佇列的處理過程:通常佇列會畫成水平,其中一端作為佇列的前端(front)也稱隊首(head),另一端作為佇列的末端(rear)也稱隊尾(tail).元素都是從佇列末端進入,從佇列前端退出.
因而在佇列中,其處理過程可在佇列的兩端進行,而在棧中,其處理過程只在棧的一端進行,但兩者也有相似之處,與棧類似,佇列中也沒有操作能讓使用者「抵達」佇列中部,同樣也沒有操作允許使用者重組或刪除多個元素。(不過這些操作都可以再鍊錶中實現)
下面我們定義乙個泛型queueadt介面來表示佇列的各種操作(佇列的首要作用是儲存順序,而棧則相反是用來顛倒順序)
package與棧的實現一樣,我們這裡也提供兩種實現方法:鍊錶與陣列的實現xidian.sl.queue;
import
xidian.sl.stack.emptycollectionexception;
/*** 棧的首要作用是顛倒順序,而佇列的首要作用是保持順序
* */
public
inte***ce queueadt
1.鍊錶實現佇列:
佇列與棧的區別在於,我們必須要操作鍊錶的兩端。因此,除了乙個指向鍊錶首元素的引用外,還需要跟蹤另乙個指向鍊錶末元素的引用。再增加乙個整形變數count來跟蹤佇列中的元素個數。
綜合考慮,我們使用末端入列,前端出列
package這裡使用到的linearnode類與在棧中使用到的是一樣的: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()
}
packagexidian.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...