01.16 Python 算法 05 -- 3+4*5-6=?在棧中的調用

Python 算法 05 -- 3+4*5-6=?在棧中的調用

Python 算法 05 -- 3+4*5-6=?在棧中的調用


Python 算法 05 -- 3+4*5-6=?在棧中的調用

棧的示意圖

1、什麼是棧(stack)呢?

作為一個吃貨,把“棧”想象是一摞迭在一起的大餅,在放餅的時候,需要自下而上一個一個放,拿餅的時候需要自上而下一個一個拿。

Python 算法 05 -- 3+4*5-6=?在棧中的調用

棧的數據結構:

① 先進後出,後進先出

② 只能在一端進行插入和刪除操作

2、 棧的應用場景

① 棧在表達式求值中的使用

3+4*5-6=?

分為 2 個棧,1 個存儲數字的棧,1 個 存儲運算符的棧。

表達式從左到右遍歷表達式,遇到數組就壓入操作數棧,遇到運算符,就將運算符棧的棧頂數據做比較。

如果運算符優先級高於運算符棧棧頂元素,就將運算符入棧。如果低於,就將棧頂元素取出,同事從操作數棧中取出兩個元素進行運算,並將運算結果壓入操作數棧。


Python 算法 05 -- 3+4*5-6=?在棧中的調用

② 棧在函數中的使用

Python 算法 05 -- 3+4*5-6=?在棧中的調用

Python 算法 05 -- 3+4*5-6=?在棧中的調用

● 當調用 greet("Python 大星"),計算機為該函數調用分配一塊內存

Python 算法 05 -- 3+4*5-6=?在棧中的調用

變量name被設置為Python大星,需要存儲到內存中

● 打印 hello, Python 大星! 再調用 greet2("Python大星")

Python 算法 05 -- 3+4*5-6=?在棧中的調用

計算機使用一個棧來表示這些內存塊,其中第二個內存塊位於第一個內存塊上面。打印 how are you,Python 大星? ,然後greet2調用返回,此時棧頂的內存塊被彈出。

Python 算法 05 -- 3+4*5-6=?在棧中的調用

● 打印 getting ready to say bye,再調用函數 bye

Python 算法 05 -- 3+4*5-6=?在棧中的調用

打印 ok bye!並從 bye 函數返回

Python 算法 05 -- 3+4*5-6=?在棧中的調用

● 回到函數 greet ,無其他事情要做,從函數 greet 返回


>>>


分享到:


相關文章: