[數據結構與算法分析]棧的應用-學習筆記

平時我們很少接觸到一個棧的使用,但是今天看了如下三個例子後感觸頗深,對於棧應用的情況理解更深了。分享如下:

1、平衡符號

平衡是個動詞,意思就是用來平衡符號的,例如關於方法裏{}左右大括號的匹配問題,在許多的語言裏一旦發生缺少{}很難找到錯誤的位置,我們這樣來平衡符號,當讀到{[(時壓入棧中如果遇到)]}時則彈出棧,但是如果彈出的棧和觸發彈出棧的符號不匹配這就說明符號不平衡:

2、後綴表達式

在計算機裏如何計算具有優先級的數學公式成了問題,帶有括號的更加複雜。所用的時間肯定大於O(n)。那麼我們需要一種表達式來簡化計算時間那就是後綴表達式

如:3+2*6=15(中綴表達式)326*+=15(中綴表達式)

其計算方式如下:

那麼如何把中綴表達式轉換成後綴表達式呢

1、遇到字符輸出遇到操作符和“(”壓棧

2、當壓入一個棧的時候如果棧頂元素比壓入棧的元素優先度高則開始彈出棧直到棧頂元素的優先級小於壓棧元素

3、“(”只有遇到“)”纔開始彈棧,並且只彈到“(”,左右括號都不輸出(默認左括號優先度最高)

3、方法調用

還記得我們在java本地方法棧中講解的麼,如果不記得了請見Jvm內存分配。在這裏面我們就應用了棧作爲方法的調用,接下來我們詳細說一說棧,舉個比較常見的例子

在遞歸的時候,當我們要進入下一個方法的時候,我們需要存儲所有的變量信息,列入寄存器的值、返回地址等,如果我們不存儲的話,當遞歸返回的時候這些值都已經被下一個方法重寫了,所以我們把它壓入到棧中,直到方法結束完彈出,把存儲的信息再賦值回去。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章