棧的應用 四則運算表示式求值

2021-10-25 10:38:25 字數 1352 閱讀 9007

棧的現實應用有很多,數學表示式的求值就是其中乙個,數學表示式中存在先乘除再加減,從左到右,從括號內到括號外的運算規則。而字尾表達法是一種不需要括號的表示方法,也稱之為逆波蘭表示。

舉例:9+(3-1)×3+10/2用字尾表示式為9 3 1-3×+10 2/+

字尾表示式:9 3 1-3 ×+10 2/+

規則:從左到右遍歷表示式的每個數字和符號,遇到數字就進棧,遇到符號,就將處於棧頂的兩個數字出棧,進行運算,運算結果進棧,一直到獲得最終結果。

(1)初始化乙個空棧。

(2)字尾表示式的前三個是數字,所以9,3,1進棧。

(3)接下來時"-",所以將棧中的1出棧作為減數,3出棧作為被減數,並運算出結果為2,再將2進棧。

(4)接著是3進棧。

(5)後面時"×",棧中的3和2出棧,相乘,得到6進棧。

(6)"+",所以6和9出棧,相加得到15.

(7)10和2進棧。

(8)"/",棧頂的2和10出棧得到5。

(9)最後乙個符號是"+",所以15和5出棧相加得到最後結果為20。

中綴表示式9+(3-1)×3+10/2轉化為字尾表示式為9 3 1-3×+10 2/+

規則:從左到右遍歷中綴表示式的每乙個數字和符號,若是數字就輸出,就成為字尾表示式的一部分;若是符號,則判斷與其棧頂符號的優先順序,是右括號或者優先順序不高於棧頂符號則棧頂元素依次出棧並輸出,並將當前符號進棧,一直到最終輸出字尾表示式

(1)初始化乙個空棧。

(2)第乙個數字是9,輸出9,後面符號是"+",進棧。

(3)第三個符號是"(",左括號未配對,進棧。

(4)第四個數字是3,輸出,此時表示式為9 3,接下來"-",進棧。

(5)數字1,輸出,表示式為9 3 1;後面符號是")",所以此時匹配左括號,棧頂元素依次出棧,直到"(「出棧為止。因為」(「的上方只有」-",因此輸出"-"。此時的表示式為9 3 1 -.

(6)緊接著是符號"×",因為此時棧頂符號為"+",優先順序低於"×",因此不輸出,「×"進棧,接下來是數字3輸出,此時表示式為9 3 1 - 3.

(7)之後是符號」+",此時棧頂元素為"×",優先順序高於"+",所以棧中元素出棧並輸出(因為沒有比"+「更低的優先順序,所以全部出棧),此時的表示式為9 3 1 - 3 × +;然後將這個」+「進棧。(此時輸出的」+「是中綴表示式9後面那個」+",進棧的"+「是最後乙個」+")

(8)數字10,輸出,表示式為9 3 1 - 3 × +10;最後的符號為"/",進棧。

(9)最後乙個數字2,輸出,表示式為9 3 1 - 3 × +10 2

(10)到達最後,將棧中的元素出棧並輸出;最後的表示式為9 3 1 - 3 × + 10 2 / +。

四則運算表示式求值(棧的應用)

1.前 中 字尾表示式的轉換 首先需要明白三者之間的轉換 自然表示式轉換為前 中 字尾表示式,其實是很簡單的。首先將自然表示式按照優先順序順序,構造出與表示式相對應的二叉樹,然後對二叉樹進行前 中 字尾遍歷,即得到前 中 字尾表示式。舉例說明將自然表示式轉換成二叉樹 a b c d 根據表示式的優先...

棧的應用 四則運算表示式求值

1 字尾表示法定義 所有的符號都是在要運算數字的後面出現。如 9 3 1 3 10 2的字尾表示法應該是9 3 1 3 10 2 2 字尾表示式計算結果 規則 從左到右遍歷表示式的每個數字和符號,遇到數字就進棧,遇到是符號,就將處於棧頂的兩個數字出棧,進行運算,運算結果進棧,一直到最終獲得結果。以9...

棧的應用 四則運算表示式求值

棧是計算機中非常基礎而又極其重要的一種資料結構,許多演算法的實現都離不開棧,它的特點是 先進後出 也可以說 後進先出 打乙個形象的比方 棧好比乙個彈夾,最先放入的子彈只能最後打出 而最後放入的子彈則最先打出。我們生活中接觸的表示式大部分都是中綴表示式,形如a b,這種表示式的特點是將運算子放在了運算...