五 棧的應用

2021-09-01 11:18:18 字數 773 閱讀 5411

棧是一種操作受限的線性表,後進先出。用陣列實現的叫順序棧,用鍊錶實現的叫鏈式棧。入棧、出棧的時間複雜度都為o(1)。

1.棧在函式呼叫中的應用

對每個執行緒會單獨建立乙個執行時棧。對每個函式呼叫會在棧記憶體生成乙個棧幀(stack frame)。所有的區域性變數將在棧記憶體中建立。棧區是執行緒安全的,因為它不是乙個共享資源。棧幀被分為三個子實體:

a 區域性變數陣列 – 包含多少個與方法相關的區域性變數並且相應的值將被儲存在這裡。

b 運算元棧 – 如果需要執行任何中間操作,運算元棧作為執行時工作區去執行指令。

c 幀資料 – 方法的所有符號都儲存在這裡。在任意異常的情況下,catch塊的資訊將會被儲存在幀資料裡面。

2.棧在表示式求值中的應用

比如計算表示式 34+13*9+44-12/3。編譯器通過兩個棧,乙個儲存運算元,乙個儲存運算子。從左到右遍歷表示式,數字壓入運算元棧,運算子壓入運算子棧。如果運算子比棧頂元素優先順序低或者相同,就從運算元棧中取兩個運算元計算,把結果壓入運算元,繼續比較。

3.棧在檢測括號是否匹配

用棧儲存未匹配的左括號,從左到右遍歷字串,遇到左括號壓入棧中,遇到右括號從棧頂取出乙個左括號進行匹配,繼續匹配。

4.棧如何實現瀏覽器的前進和後退功能

利用兩個棧,把正常瀏覽的頁面依次壓入第乙個棧,當後退時,從第乙個棧頂取出乙個頁面壓入第二個棧,前進時從第二個棧取出乙個值壓入第乙個棧,正常瀏覽後清空第二個棧。

最小棧(輔助棧的應用)

設計乙個支援 push,pop,top 操作,並能在常數時間內檢索到最小元素的棧。push x 將元素 x 推入棧中。pop 刪除棧頂的元素。top 獲取棧頂元素。getmin 檢索棧中的最小元素。示例 minstack minstack new minstack minstack.push 2 m...

棧的應用舉例

一 目的 掌握棧的表示,實現及其針對棧的各種操作進行具體的應用。二 要求 1 建立乙個順序棧,實現括號配對,判斷乙個表示式中括號配對是否合法。2 當使用者輸入乙個合法的表示式後,能夠返回正確的結果。能夠計算的運算子包括 加 減 乘 除 括號 能夠計算的數要求在實數範圍內。對於異常表示式給出錯誤提示。...

C STL stack棧的應用

棧 statck 這種資料結構在計算機中是相當出名的。棧中的資料是先進後出的 first in last out,filo 棧只有乙個出口,允許新增元素 只能在棧頂上增加 移出元素 只能移出棧頂元素 取得棧頂元素等操作。在stl中,棧是以別的容器作為底部結構,再將介面改變,使之符合棧的特性就可以了。...