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

2021-07-05 10:30:34 字數 2450 閱讀 9378

1:字尾表示法定義

所有的符號都是在要運算數字的後面出現。

如:

9+(3-1)*3+10/2的字尾表示法應該是9 3 1-3*+10 2/+
2:字尾表示式計算結果

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

以9 3 1-3*+10 2/+為例

1:初始化乙個空棧。

2:表示式中前三個都是數字,所以9、3、1進棧。

棧:9 3 1

3:遇到符號「-」,所以將棧頂的1出棧作為減數,3出棧作為被減數,並運算3-1得到2,再將2進棧。

棧:9 2

4:數字3進棧。

棧:9 2 3

5:遇到符號「*」,所以將棧頂的3和2出棧,並運算3*2得到6,再將6進棧。

棧:9 6

6:遇到符號「+」,所以將棧頂的6和9出棧,並運算6+9得到15,再將15進棧。

棧:15

7:數字10和2進棧。

棧:15 10 2

8:遇到符號「/」,所以將棧頂的2和10出棧,並運算10/2得到5,再將5進棧。

棧:15 5

9:遇到符號「+」,所以將棧頂的5和15出棧,並運算5+15得到20,再將20進棧。

棧:20

10:運算結束,將棧頂的20出棧即為運算結果,棧變為空。

**如下:

public

int count(string post)

switch(post[i])

}return

deque.pop();

}

3:中綴表示式轉字尾表示式

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

以9+(3-1)*3+10/2為例

1:初始化一空棧。

2:遇到數字9,輸出9。接著是符號「+」,進棧。

輸出:9 棧:+

3:遇到符號「(」,因其實左括號,還未配對,進棧。

輸出:9 棧:+,(

4:遇到數字3,輸出3。接著是符號「-」,進棧。

輸出:9 3 棧:+,(,-

5:遇到數字1,輸出1。接著是符號「)」,此時,我們要匹配此前的「(」,所以棧頂一次出戰,並輸出,直到「(」出棧為止。

輸出:9 3 1 - 棧:+

6:遇到符號「*」,因為優先順序高於棧頂符號為「+」,因此「*」進棧。

輸出:9 3 1 - 棧:+,*

7:遇到數字3,輸出3。接著是符號「+」,優先順序低於棧頂符號「*」,因此棧中元素出棧並輸出(沒有比「+」號更低的優先順序,所以全部出棧),然後符號「+」進棧。

輸出:9 3 1 - 3 * + 棧:+

8:遇到數字10,輸出10。接著是符號「/」,優先順序高於棧頂符號「+」,因此「/」進棧。

輸出:9 3 1 - 3 * + 10 棧:+,/

9:遇到數字2,輸出2。因已經到最後,所以棧中符號全部出棧輸出。

輸出:9 3 1 - 3 * + 10 2 / +

**如下:

public

int precede(string x,string y)

switch(y)

return a>=b?1:0;

}public string mid_post(string mid)

deque.pop(); //必須將符號「(」出棧

break;

case

"+":

case

"-":

case

"*":

case

"/":

case

"(":

while(!deque.isempty()&&precede(deque.peek(),mid[i])>0)

deque.push(mid[i]);

break;

default:}}

while(!deque.isempty())

return sb.tostring().split(" ");

}

4:中綴表示式轉字尾表示式的一般方法

以9+(3-1)*3+10/2為例

1:根據優先順序,新增括號

((9+((3-1)*3))+(10/2))

2:將符號移到對應的右括號右邊

((9((3

1)-3)*)+(10

2)/)+

3:將括號去掉後即得字尾表示式93

1-3*+

102/+

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

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

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

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

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

若要計算機具有處理標準表示式的能力,最重要的有兩步 1 將中綴表示式轉化為字尾表示式 2 將字尾表示式進行運算得出結果 中綴表示式 標準四則運算表示式,即 8 3 2 4 10 2 2 字尾表示式 所有的符號都是要在運算數字的後面出現。例 將 8 3 2 4 10 2 2 轉為字尾表示式為 8 3 ...