前缀中缀后缀表达式的计算求值
生活随笔
收集整理的這篇文章主要介紹了
前缀中缀后缀表达式的计算求值
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
原文在這里
表達式
前綴表達式(波蘭表達式)
前綴表達式求值
前綴表達式的計算機求值
從右至左掃描表達式,遇到數字時,將數字壓入堆棧,遇到運算符時,彈出棧頂的兩個數,用運算符對它們做相應的計算(棧頂元素 和 次頂元素),并將結果入棧;重復上述過程直到表達式最左端,最后運算得出的值即為表達式的結果
例如: (3+4)×5-6 對應的前綴表達式就是 - × + 3 4 5 6 , 針對前綴表達式求值步驟如下:
- 從右至左掃描,將6、5、4、3壓入堆棧
- 遇到+運算符,因此彈出3和4(3為棧頂元素,4為次頂元素),計算出3+4的值,得7,再將7入棧
- 接下來是×運算符,因此彈出7和5,計算出7×5=35,將35入棧
- 最后是-運算符,計算出35-6的值,即29,由此得出最終結果
中綴表達式
中綴表達式
中綴表達式就是常見的運算表達式,如(3+4)×5-6
中綴表達式的求值是我們人最熟悉的,但是對計算機來說卻不好操作(前面我們講的案例就能看的這個問題),因此,在計算結果時,往往會將中綴表達式轉成其它表達式來操作(一般轉成后綴表達式.)
中綴表達式對于我們人來好搞,計算機他算不算明白,就離譜
計算機不知道怎么算這個優先級
后綴表達式(逆波蘭表達式)
后綴表達式
后綴表達式又稱逆波蘭表達式,與前綴表達式相似,只是運算符位于操作數之后
中舉例說明: (3+4)×5-6 對應的后綴表達式就是 3 4 + 5 × 6 –
再比如:
| a+b | a b + |
| a+(b-c) | a b c - + |
| a+(b-c)*d | a b c – d * + |
| a+d*(b-c) | a d b c - * + |
| a=1+3 | a 1 3 + = |
后綴表達式的計算機求值
從左至右掃描表達式,遇到數字時,將數字壓入堆棧,遇到運算符時,彈出棧頂的兩個數,用運算符對它們做相應的計算(次頂元素 和 棧頂元素),并將結果入棧;重復上述過程直到表達式最右端,最后運算得出的值即為表達式的結果
例如: (3+4)×5-6 對應的后綴表達式就是 3 4 + 5 × 6 - , 針對后綴表達式求值步驟如下:
我們完成一個逆波蘭計算器,要求完成如下任務:
執行
public static void main(String[] args) {//完成將一個中綴表達式轉成后綴表達式的功能//說明//1. 1+((2+3)×4)-5 => 轉成 1 2 3 + 4 × + 5 –//2. 因為直接對str 進行操作,不方便,因此 先將 "1+((2+3)×4)-5" =》 中綴的表達式對應的List// 即 "1+((2+3)×4)-5" => ArrayList [1,+,(,(,2,+,3,),*,4,),-,5]//3. 將得到的中綴表達式對應的List => 后綴表達式對應的List// 即 ArrayList [1,+,(,(,2,+,3,),*,4,),-,5] =》 ArrayList [1,2,3,+,4,*,+,5,–]String expression = "1+((2+3)*4)-5";//注意表達式List<String> infixExpressionList = toInfixExpressionList(expression);System.out.println("中綴表達式對應的List=" + infixExpressionList); // ArrayList [1,+,(,(,2,+,3,),*,4,),-,5]List<String> suffixExpreesionList = parseSuffixExpreesionList(infixExpressionList);System.out.println("后綴表達式對應的List" + suffixExpreesionList); //ArrayList [1,2,3,+,4,*,+,5,–]System.out.printf("expression=%d", calculate(suffixExpreesionList)); // ?/*//先定義給逆波蘭表達式//(30+4)×5-6 => 30 4 + 5 × 6 - => 164// 4 * 5 - 8 + 60 + 8 / 2 => 4 5 * 8 - 60 + 8 2 / +//測試//說明為了方便,逆波蘭表達式 的數字和符號使用空格隔開//String suffixExpression = "30 4 + 5 * 6 -";String suffixExpression = "4 5 * 8 - 60 + 8 2 / +"; // 76//思路//1. 先將 "3 4 + 5 × 6 - " => 放到ArrayList中//2. 將 ArrayList 傳遞給一個方法,遍歷 ArrayList 配合棧 完成計算List<String> list = getListString(suffixExpression);System.out.println("rpnList=" + list);int res = calculate(list);System.out.println("計算的結果是=" + res);*/ }原文在這里
總結
以上是生活随笔為你收集整理的前缀中缀后缀表达式的计算求值的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 基于STM32的双向DC-DC变换器(论
- 下一篇: 【语音识别】基于MFCC实现声纹识别ma