資料結構複習(2) 棧與佇列

2021-10-05 20:27:57 字數 2461 閱讀 2689

順序棧top=-1 or top=0 (all right,c++ stack<> use -1)

top==-1時,棧空;

top == maxsize-1時,棧滿;

top+1 == 棧長 。

top ==0時,棧空;

top == maxsize+0時,棧滿;

top == 棧長。

共享棧:

(1) top1=-1,top2=maxsize時,棧空;

(2) top2-top1=1時棧滿。

(1) top1=0,top2=maxsize-1時,棧空;

(2) top2-top1=0時棧滿。

鏈式棧所有操作都在頭結點(頭指標)進行。

棧空與鍊錶空一樣,鏈式棧不會滿。

棧的輸出序列個數 == 卡特蘭數

快速判斷輸出序列是否錯誤

出棧序列中每乙個元素之後所有比他小的元素會組成乙個遞減的序列。

佇列順序佇列

front == 隊頭指標 == 指向隊頭元素,rear == 隊尾指標 == 指向隊尾元素+1,都從0開始。

出隊入隊操作:出隊front+1,入隊rear+1。

隊長:rear-front。

front == rear,隊空;rear-front==maxsize,隊滿。

如果,此時隊頭開始出隊,明知道隊沒有滿,但是侷限於單一的+1操作,沒有辦法再利用空餘的空間了,這就是假溢位。這個時候衍生出迴圈佇列,其實順序佇列和迴圈佇列都是順序儲存,只是指標改動有了變化。

迴圈佇列

front == 隊頭指標 == 指向隊頭元素,rear == 隊尾指標 == 指向隊尾元素+1,都從0開始。

出隊操作:front =(front+1)%maxsize。

入隊操作:rear=(rear+1)%maxsize。

很好理解,%在此的作用就像乙個if語句,如果rear+1還小於maxsize的時候就相當於簡單的+1,如果rear+1等於maxsize就把rear打回原形。front同理。隊長:(rear-front+maxsize)%maxsize。

+maxsize相當於矯正rear小front大的情況 。front == rear,隊空。

但是又會出現新的疑問,迴圈佇列頭尾相連,隊滿和隊空的判斷如果還是簡單看到表面會混淆,因為判斷式是一樣的!

為此人們提出了空一格(rear+1)%maxsize == front,如果rear再加一就和front一樣了,那隊滿了。

當然還有別的辦法:

例如,增加乙個變數來計數;

例如,出隊操作標識tag == 0,此時引起的front == rear是隊空;入隊操作標識tag ==1,此時引起的front == rear時隊滿。

鏈式佇列

front指向頭結點,rear指向最後乙個結點

入隊操作在rear,沒啥好說的;出隊操作在front,需要特別注意,當出隊是最後乙個元素的時候,front和rear都需要變動了當front和rear都指向了頭結點隊空。

雙端佇列

正常的雙端佇列如下:

輸出受限的雙端佇列和輸入受限的雙端佇列如下,當我們遮蔽一端就發現是乙個棧,所以棧中合法的輸出序列在輸出受限的雙端佇列中均合法。剩下n!-f(n)個在棧中非法的,看看開啟另一端會不會使他們合法。

這個要檢驗,沒有什麼快速的方法。

佇列與棧的應用

棧用於括號的匹配;

棧用於表示式求值:

運算子的優先順序:

總結幾點:

1.棧外的(最大,壓在一切運算子頭上,到了棧內就最小;

2.遇到)就彈出直到遇到(;

3.所有的要入棧的運算子都是當它比棧頂運算子優先順序大的時候壓在上面,小的話就會彈出棧頂直到它可以壓住時再入棧;

4.±之間棧內大,*/ 之間棧外大,兩者之間肯定時 */大於±呀!

棧用於遞迴;

佇列用於層次遍歷。

複習 資料結構 棧和佇列

鏈佇列 include include define elemtype char define maxsize 100 typedef struct node 定義節點型別 snode typedef struct lqueue void initqueue lqueue qu void enque...

資料結構複習 棧和佇列

棧是一種只能在一端進行插入或刪除操作的線性表 棧的最主要特點是後進先出 lifo n個不同的元素進棧,其出棧次序總數為 catalan number c 2n nn 1 frac n 1c2n n typedef elemtype int typedef struct 共享棧 如果要用到兩個相同型別...

資料結構C(棧與佇列(2

佇列我們可以看作是買票上車,遵循乙個 先進先出 的乙個原則。操作 插入的操作叫隊尾入隊 enqueue 刪除的操作叫對頭出隊 dequeue 佇列的順序儲存 佇列的儲存結構是由 一維陣列來實現的。乙個記錄佇列頭元素的位置的變數front 乙個記錄佇列尾元素的位置的變數rear struct queu...