佇列採用陣列儲存,且含有資料(任意型別),隊頭和隊尾指標(int),所以採用結構體描述。
#define maxsize 10;//佇列中元素的最大個數
typedef char elemtype;//元素型別
a.初始化
void initqueue(sqqueue &q)
b.判空bool isempty(sqqueue q)
c.入隊bool enqueue(sqqueue &q,elemtype x)
d.出隊bool dequeue(sqqueue &q,elemtype &x)
note:
(1)初始時,rear=front=0;
(2)隊空條件:rear=front;
(3)隊滿條件:(rear+1)%maxsize=front;
這種情況下,迴圈佇列中有乙個空單元,rear正指向它,front指向它的下乙個單元;
(4)佇列長度:(rear-front+maxsize)%maxsize;
(5)佇列中最多有n-1個元素;
(6)以上這些情況均為:front指向隊頭元素,rear指向隊尾元素的下乙個元素。
front指向鏈首結點(一般為頭節點),rear指向鏈尾結點。
鏈隊包含各個結點(包括資料域和下乙個指標域)和頭尾指標,而頭尾指標型別是結點型別。因此採用結構體定義鏈隊,先定義結點。
typedef struct linknode linknode;//結點定義
typedef structlinkqueue;//鏈隊定義
tips:以下討論關於鏈隊的操作均建立在鏈隊有頭節點的基礎上。
a.初始化void initqueue(linkqueue &q)
b.判隊空bool isempty(linkqueue q)
c.入隊void enqueue(linkqueue &q,elemtype x)
d.出隊bool dequeue(linkqueue &q,elemtype &x)
note:
(1)初始時,rear=front=新節點;
(2)由於是鏈隊,入隊時不需判斷佇列是否已滿;
(3)出隊時需要判斷佇列是否為空,當刪除的結點是鏈隊尾結點時,需要修改尾指標。
允許兩端都可以進行入隊和出隊操作的佇列。
關於佇列的其它遺留問題見:
佇列的複習
恩,順便說一下佇列吧,佇列與棧相比,是一種先進先出的資料結構,類似一頭進一頭出的資料結構,允許插入的隊尾,刪除元素叫出隊,出隊一般在隊頭實現,一般對作業系統中的處理訊息的訊息佇列,就是對佇列的典型操作,乙個訊息接乙個訊息就盡心排隊,處理時出隊,觸發時入隊,ok 下面我將對佇列進行定義 首先是單鏈表形...
單調佇列複習
1.適用情況 需要快速求出區間最大 最小值的情況 常用於dp優化 有單調的題 2.原理 思路 每次有元素進隊時,找到合適的隊尾接上,保證佇列單調性。刪除後面不必要的一段 同時,維護可用區間,及時去頭。3.性質 一般,在動態規劃的過程中,單調佇列中每個元素一般儲存的是兩個值 1.在原數列中的位置 下標...
資料結構複習總結 棧和佇列
二 佇列 一般設初值為top1 1 棧空 top2 n 棧空 當且僅當top2 top1 1時共享棧滿 即兩個棧頂指標相鄰 設計演算法判斷單鏈表 字元型data域 的全部n個字元是否中心對稱。ex xyx,xyyx 思路 利用棧的先進後出的特點,將鍊錶前一半元素依次進棧,然後將棧中元素出棧,與鍊錶的...