佇列是只允許在一端進行插入(隊尾),而在另一端進行刪除(隊首)的線性表。
先進入佇列的元素必然先離開佇列.即先進先出(fifo)
順序佇列:
#define maxsize 50 //佇列中元素最大個數
typedef struct sqqueue;
迴圈佇列有乙個明顯的缺點就是假溢位,即佇列仍然有空間,但是由於隊首不允許插入,導致無法繼續插入資料。使用迴圈佇列就可以解決這個問題。
迴圈佇列:
入隊:rear=(rear+1)%maxsize
出隊:front=(front+1)%maxsize
我們把front=rear僅作為隊空的判定條件。當佇列滿的時候,令陣列中仍然保留乙個空餘單元。我們認為這種情況就是佇列滿了。
佇列滿時的等量關係:
(rear+1)%maxsize==front;
佇列中元素個數:
(rear-front+maxsize)%maxsize
1.迴圈佇列的入隊操作:
bool enqueue(sqqueue &q,elemtype x)
2.迴圈佇列的出隊操作:
bool dequeue(sqqueue &q,elemtype &x)
鏈式佇列
鏈式佇列實際上是乙個同時帶有隊頭指標和隊尾指標的單鏈表。頭指標指向隊頭節點,尾指標指向隊尾結點(即單鏈表的最後乙個結點)。
鏈式佇列的定義:
typedef structlinknode;
typedef structlinkqueue;
1.鏈式佇列的入隊操作
void enqueue(linkqueue &q,elemtype x)
2.鏈式佇列的出隊操作
bool dequeue(linkqueue &q,elemtype &x)
雙端佇列:
雙端佇列是指允許兩端都可以進行入隊和出隊操作的佇列,其元素的邏輯結構仍是線性結構。將佇列的兩端分別稱為前端和後端,兩端都可以入隊和出隊。
棧的應用:
1.括號匹配
演算法思想:若是左括號,入棧;若是右括號,出棧乙個左括號並判斷是否與之匹配;檢驗到字串尾,還要檢查棧是否為空。只有棧空,整個字串才是括號匹配的。
bool check(char *str)
2)求斐波那契數列的第n項
int fib(int n)
資料結構筆記 佇列
佇列 queue 是只允許在一端進行插入操作,而在另一端進行刪除操作的線性表。佇列是一種先進先出的線性表。允許插入的一端稱為隊尾,允許刪除的一端稱為隊頭。如下圖所示 線性表有順序儲存和鏈式儲存,棧是線性表,所以有這兩種儲存方式。同樣,佇列作為一種特殊的線性表,也同樣存在這兩種儲存方式。佇列順序儲存的...
資料結構 佇列筆記
有序列表,可以用陣列或者鍊錶來實現 特點 先進先出 eg 銀行排號 陣列模擬佇列演算法 實現 public class arrayqueuedemo case a case g catch exception e break case h catch exception e break case e...
資料結構之佇列
八 佇列 鏈式佇列 鍊錶實現 隊尾 rear 隊首 front 靜態佇列 陣列實現 必須是迴圈佇列 需要幾個引數來確定,各引數含義 1 佇列初始化 front和rear值都是0 2 佇列非空 front代表佇列第乙個元素 rear代表佇列最後乙個元素的 下乙個元素 3 佇列空 front和rear相...