棧和隊列也算是 資料類型。
以為都是在首位操作,棧和隊列 克服了 線性表添加删除需要移動大量元素的弱點。
棧僅在尾部進行插入和删除,尾部叫做棧頂, 表頭叫做棧底。後進先出。
last in first out LIFO
空棧。
插入叫入棧, 删除元素叫出棧。
順序棧,的順序存儲結構是利用一組 位址連續的存儲單元,依次存放棧底到棧頂的元素。 top表示棧頂元素的位置,那麼 top=0就是空棧。非空棧的棧頂指針top始終在 棧頂元素的下一個位置。
代碼寫的過于聚合,容易造成很高深的錯覺,其實,是不容易看出思路來的。
棧的應用
1,數值轉換 https://github.com/kunpengku/farmer/blob/master/cpp/mod_2.cpp
2,括号比對的檢驗
3,行編輯程式, 棧用來做 倒退功能。
4,迷宮求解。
5,表達式求值,算符優先算法。
任何一個表達式都是由,操作數,操作符,界限符組成。
括号就是界限符。
6,棧與 遞歸
調用自己的函數 成為遞歸函數。
漢諾塔問題。
函數調用棧:
在運作被調用函數前,系統要做三件事情:
1,将所有實參,傳回位址傳給被調函數儲存。
2,為被調用函數的局部變量配置設定存儲區,
3,将控制權轉移到被調用函數入口。
在被調函數傳回前,也要做三件事:
1,儲存計算結果。
2,釋放被調函數的局部變量,
3,依照儲存的傳回位址,将控制權交給調用函數。
遞歸函數友善在 : 這種程式設計,不需使用者自己,而由系統來管理遞歸工作棧。