棧(stack):是限定僅在表尾(棧頂)進行插入和刪除操作的線性表。
我們把允許插入和刪除的一端稱為 棧頂(top),另一端稱為 棧底(bottom),不含任何任何資料元素的棧稱為 空棧。棧又稱為 後進先出(last in first out) 的線性表,簡稱 lifo 結構。
棧 是線性表的特例,其具備先進後出 filo 特性。可以使用線性表的順序儲存結構(即陣列)實現棧,將之稱之為 順序棧;可以使用單鏈表結構實現棧,將之稱之為 鏈棧。兩者示意圖如下所示:
順序棧和鏈棧的時間複雜度均為0(1)。對於空間效能,順序棧需要事先確定乙個固定的長度(陣列長度),可能存在記憶體空間浪費問題,但它的優勢是訪問時定位很方便;而鏈棧則要求每個元素都要配套乙個指向下個結點的指標域,增大了記憶體開銷,但好處是棧的長度無限。因此,如果棧的使用過程中元素變化不可預料,有時很小,有時很大,那麼最好使用鏈棧;反之,如果它的變化在可控範圍內,則建議使用順序棧。
棧的內部實現原理其實就是陣列或鍊錶的操作,而之所以引入 棧 這個概念,是為了將程式設計問題模型化,用高層的模組指導特定行為(棧的先進後出特性),劃分了不同關注層次,使得思考範圍縮小,更加聚焦於我們致力解決的問題核心,簡化了程式設計的問題。
棧 有乙個很重要的應用:遞迴。每個遞迴定義必須至少有乙個條件,使得當滿足條件時,遞迴不再進行。
遞迴 的乙個經典例子為:斐波那契數列(fibonacci),指的是這樣乙個數列:1、1、2、3、5、8、13、21、……,即當前位置的值為前面兩項之和。用數學表示式表達如下:
將公式翻譯為**如下:
int
fib(
int n)
}return ret;
}
如果使用遞迴會更簡便:
int
fib(
int n)
資料結構 棧 棧
可以把棧想像成乙個桶 進棧 就是把和桶口一樣大的燒餅往桶裡面扔 出棧 就是把燒餅拿出來 特點 先進後出。先扔進去的燒餅最後才能拿出來,最後扔進去的燒餅,第乙個拿出來 剛開始top 1 top 1 然後把進棧的元素賦值給data top 入棧操作 void push stack s,int x els...
資料結構 棧
例子 棧是一種被限制在只能在表的一端進行插入和刪除運算的線性表。區域性變數是用棧來儲存的 可以進行插入和刪除的一端稱為 棧頂 top 另一端稱為 棧底 bottom 當表中沒有元素時 表長為0的棧 稱為 空棧。棧的修改是按 後進先出的原則進行,因此棧被稱為後進先出 last in first out...
資料結構 棧
1.棧stack 是限定僅在表尾進行刪除和插入操作的線性表。允許插入刪除的一端叫做棧頂top,另外一端叫做棧底bottom。棧又稱為後進先出 lifo 的線性表。即表尾是指棧頂。2.順序棧 定義 top指向可存入元素的位置。typedef struct stacktypestacktype 插入 進...