棧(stack)是一個特殊的線性表,是限定僅在一端(通常是表尾)進行插入和刪除操作的線性表。
又稱為后進先出(Last In First Out)的線性表,簡稱 LIFO 結構。


棧的相関概念:棧是僅在表尾進行插入、刪除操作的線性表。
表尾(即an端)稱為棧頂 Top;表頭(即a1端)稱為棧底 Base
例如:棧 s = (a1,a2,a3.....an-1,an) a1被稱為棧底元素,an被稱為棧頂元素
插入元素到棧頂(即表尾)的操作,稱為入棧。
從棧頂(即表尾)刪除最后一個元素的操作,稱為出棧。
棧的示意圖:

操作示意圖-入棧:

操作示意圖-出棧:

【思考】假設有3個元素a,b,c,入棧順序是a,b,c 則他們的出棧順序有幾種可能
入棧順序:a進入后,b進入,最后c進入
出棧順序:(先進后出)所以得到,c,b,a這種出棧順序
也可以:a入棧,接着a出棧;b入棧,接着b出棧;c入棧,接着c出棧。
還可以:a入棧,接着a出棧;b入棧,c入棧,接着c出棧,b出棧。
還可以:a入棧,b入棧,b出棧,a出棧,c入棧,c出棧
總結一下:
棧的定義:限定只能在表的一端進行插入和刪除運算的線性表(只能在棧頂操作)
邏輯結構:與同線性表相同,仍為一對一關系。
存儲結構:用順序棧(用順序存儲的話,就叫順序棧)或鏈棧(用鏈式存儲的話,就叫鏈棧)存儲均可,但以順序棧更常見
運算規則:只能在棧頂運算,且訪問結點時依照后進先出(LIFO)的原則
實現方式:關鍵是編寫入棧和出棧函數,具體實現依順序棧和鏈棧的不同而不同
棧與一般線性表的區別:僅在於運算規則不同。,
一般線性表
邏輯結構:一對一
存儲結構:順序表、鏈表
棧
邏輯結構:一對一
存儲結構:順序棧、鏈棧
