中綴轉字尾 逆波蘭

2022-08-29 03:36:09 字數 1282 閱讀 2296

具體步驟如下:

遇到括號時:

重複步驟2至5,直到表示式的最右邊

將s1中剩餘的運算子依次彈出並壓入s2

依次彈出s2中的元素並輸出,結果的逆序即為中綴表示式對應的字尾表示式

例如:中綴表示式 1+((2+3)*4)-5 =>轉成字尾表示式 123+4x+5-

**實現(只考慮正整數)
public class polandnotation 

//中綴轉字尾

=>轉成123+4x+5-

//2.因為直接對str.,進行操作,不方便,因此先將"1+((2+3)x4)-5" =》中綴的表示式對應的list

//即"1+((2+3)x4)-5" => arraylist [1,+,(,(,2,+,3,),*,4,),-,5]

public static listchange(string middle)else

list.add(str);

}}while (i < middle.length());

return list;

}//3.將得到的中綴表示式對應的list =>字尾表示式對應的list

// 即arraylist [1,+,(,(,2,+,3,),*,4,),-,5] =》 arraylist [1,2,3,+,4,*,+,5,-]

public static listchange2(listlist)else if (item.equals("("))else if (item.equals(")"))

s1.pop();//彈出"("

}else

s1.push(item);}}

//將s1中剩餘的運算子依次彈出並加入s2

while (s1.size()!=0)

return s2;

}public static int calculate(listls)else else if (item.equals("-"))else if (item.equals("*"))else if (item.equals("/"))else

stack.push(res + "");}}

return integer.parseint(stack.pop());

}}//比較優先順序

class operation

return result;}}

中綴轉字尾 逆波蘭表示

計算機無法識別數學表示式中的括號以及四則運算的先後順序,因此需要把數學表達示轉換成一種計算機能識別的,逆波蘭表示就能很好的解決這個問題。逆波蘭表示是數學表示式中的一種不需要括號的字尾表達法。即把乙個中綴數學表示式改變成乙個字尾表示。中綴表示的意思就是運算子在要計算的數字中間,而字尾表示就是運算子在要...

逆波蘭計算 中綴轉字尾 字尾表示式計算

我們利用棧將中綴表示式轉換為字尾表示式 逆波蘭表示式 來計算表示式 此程式支援整數運算 遍歷中綴表示式,遇到運算元就輸出,遇到符號就壓入棧中 棧中的運算子為掛起狀態 但是操作符的壓棧出棧有如下規則 碰到運算元壓入棧中,碰到運算子提取棧頂兩個元素進行相應的操作,將運算元壓入棧中,直到整個表示式遍歷完成...

逆波蘭中綴轉字尾表示式並求值

建立鏈棧 linkstack.h pragma once typedef int elemtype typedef struct node node typedef struct linkstack linkstack,ptrstack 初始化 void init ptrstack stack 入棧...