資料結構基礎 棧和佇列

2021-09-11 17:38:08 字數 2147 閱讀 7236

棧(stack)是限定僅在表尾進行出入和刪除操作的線性表。(後進先出,last in first out)

棧頂(top)、棧底(bottom)

空棧:top=-1

棧是一種特殊的線性表,插入和刪除操作只能在表尾進行(top),插入(push,進棧)、刪除(pop,出棧)。

data

同線性表,元素具有相同的型別,相鄰元素具有前驅和後繼關係。

operation

initstack(s); 初始化,建立空棧s

destroystack(s); 銷毀棧

clearstack(s); 清空棧

stackempty(s); 判斷是否空棧

gettop(s,e); 非空棧,用e返回棧頂元素

push(s,e); 插入

pop(s,e); 刪除

stacklength(s); 返回元素個數

考慮兩種情況,空棧和棧滿,需提前確定陣列儲存空間,針對兩個相同型別的棧,可以共享空間。

兩棧共享空間

棧滿:top1+1=top2

棧空:top1=-1,top2=n

對於棧來說,因為已經有了棧頂在頭部了,單鏈表中的頭結點也就沒有意義了。對於鏈棧來說,不需要頭結點。

對於鏈棧來說,沒有棧滿的情況(除非記憶體沒有可以使用的空間了,這時系統可能會宕機崩潰)。

空棧:top=null

如果兔子在出生兩個月後就有繁殖能力,一對兔子可以生出一對小兔子,假設所有的兔子都不死,那麼一年後可以繁殖多少對兔子?

1->1->2->3->5->8->13…

注意:遞迴條件,避免掉進無窮的遞迴中

系統中常見的撤銷操作,儲存資料,可以使用棧這樣的資料結構。

四則運算表示式求值

即平常所見的標準的四則運算的表示式

對於乙個式子,括號是成對出現的,對於多重括號,也是完全巢狀匹配的。可以使用棧結構,遇到左括號就入棧,出現右括號就出棧,期間進行計算。棧在這個過程中,是由空到有元素到空的過程。

針對四則運算,需要先進行乘除,後計算加減。字尾表示式,將所有符號放在運算數字後面。

佇列(queue)是只允許在一端進行插入操作,而在另一端進行刪除操作的線性表。(先進先出,first in first out)

隊頭:允許刪除的一端

隊尾:允許插入的一端

佇列也是一種特殊的線性表,在隊尾進行插入操作,而在隊頭進行刪除操作。

data

同線性表,元素具有相同的型別,相鄰元素具有前驅和後繼關係。

operation

initqueue(q); 初始化

destroyqueue(q); 銷毀

clearqueue(q); 清空

queueempty(q); 判斷是否空

gethead(q,e); 非空,用e返回隊頭元素

enqueue(q,e); 插入隊尾

dequeue(q,e); 刪除隊頭

stacklength(q); 返回元素個數

隊頭:front

隊尾:rear

空:front和rear均指向下標為0的位置。

刪除元素front後移,插入元素rear後移,可能產生假溢位(陣列下標較小的位置為空,但是rear已經出界)

迴圈佇列:解決假溢位的問題。

佇列這種頭尾相接的順序儲存結構叫做迴圈佇列。

空佇列:front=rear

佇列滿:

(1)設定標誌變數進行判斷

flag=0時,front==rear;

flag=1時,front==rear

(2)佇列空時,front=rear;

佇列滿時,保留乙個空閒單元,

(rear+1)%queuesize ==front;

迴圈佇列,可能產生陣列溢位的現象。可以看看鏈式儲存。

隊頭指標指向鏈佇列的頭結點,隊尾指標指向終端結點。

資料結構基礎 棧和佇列

特性 後進先出 from queue import lifoqueue lq lifoqueue maxsize 0 棧寫入資料 lq.put 0 lq.put 1 lq.put 2 刪除隊尾資料,並返回該資料 lq.get 輸出佇列所有資料 print lq.queue 輸出 0,1,2 0,1 ...

資料結構 棧和佇列

棧 基礎 知識棧 練習題 佇列 基礎知識 棧示意圖 後進先出 順序棧結構定義 define maxsize 1024 struct stack 操作函式 push 入棧 pop 出棧 struct lstack 鏈棧示意圖 操作函式 push 入棧 pop 出棧 注意 也可以直接呼叫系統已經寫好的庫...

資料結構 棧和佇列

本章的基本內容是 兩種特殊的線性表 棧和佇列 從資料結構角度看,棧和佇列是操作受限的線性表,他們的邏輯結構相同。從抽象資料型別角度看,棧和佇列是兩種重要的抽象資料型別。p棧 限定僅在表的一端進行插入和刪除操作的線性表。p允許插入和刪除的一端稱為棧頂,另一端稱為棧底。p空棧 不含任何資料元素的棧。a ...