天天看點

資料結構 3 棧和隊列

棧和隊列也算是 資料類型。

以為都是在首位操作,棧和隊列 克服了 線性表添加删除需要移動大量元素的弱點。

棧僅在尾部進行插入和删除,尾部叫做棧頂, 表頭叫做棧底。後進先出。

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,依照儲存的傳回位址,将控制權交給調用函數。

遞歸函數友善在 : 這種程式設計,不需使用者自己,而由系統來管理遞歸工作棧。