逆波蘭表示式 字尾表示式

2021-09-27 01:20:59 字數 1543 閱讀 4552

字首表示式又稱波蘭式,字首表示式的運算子位於運算元之前。比如:- × + 3 4 5 6中綴表示式就是常見的運算表示式,如(3+4)×5-6字尾表示式又稱逆波蘭表示式,與字首表示式相似,只是運算子位於運算元之後,比如:3 4 + 5 × 6 -

人類最熟悉的一種表示式1+2,(1+2)3,3+42+4等都是中綴表示法。對於人們來說,也是最直觀的一種求值方式,先算括號裡的,然後算乘除,最後算加減,但是,計算機處理中綴表示式卻並不方便。

我們先看乙個例子 (3+4)× 5 - 6字尾表示式3 4 + 5 × 6 -的計算

從左至右掃瞄,將3和4壓入堆疊;

遇到+運算子,因此彈出4和3(4為棧頂元素,3為次頂元素,注意與字首表示式做比較),計算出3+4的值,得7,再將7入棧;

將5入棧;

接下來是×運算子,因此彈出5和7,計算出7×5=35,將35入棧;

將6入棧;

最後是-運算子,計算出35-6的值,即29,由此得出最終結果。

1.數字直接入佇列

2.運算子要與棧頂元素比較

①棧為空直接入棧

②運算子優先順序大於棧頂元素優先順序則直接入棧

③小於或等於則出棧入列,再與棧頂元素進行比較,直到運算子優先順序小於棧頂元

素優先順序後,操作符再入棧

3.操作符是(則無條件入棧

4.操作符為),則依次出棧入列,直到匹配到第乙個「(」為止,此操作符直接捨棄,「(」直接出棧捨棄

public class suffixalgorithm

if (digital) else

if(o == right_bracket)

//將operators棧頂彈出壓入output直到左括號

while (!operators.empty())

output.push(top);

}bracket--;

continue;

}char p;

while (!operators.empty()

&& ( p = operators.peek()) != left_bracket

&& operator.cmp(o, p) <= 0)

operators.push(o);}}

while (!operators.empty())

}public static void main(string args)

public static string rpn(string exp){

stackoperators = new stack<>();

stackoutput = new stack();

rpn(operators, output, exp);

string str = "";

for(int i=0; i

逆波蘭表示式 中綴表示式 字尾表示式

1 我們這裡要實現的是 將中綴表示式轉換成字尾表示式,然後再計算最終結果,參考部落格。具體轉化演算法如下 中綴表示式a b c d e f g,其轉換成字尾表示式則為abc de f g 轉換過程需要用到棧,具體過程如下 1 如果遇到運算元,我們就直接將其輸出。2 如果遇到操作符,則我們將其放入到棧...

逆波蘭表示式 中綴表示式 字尾表示式

1 我們這裡要實現的是 將中綴表示式轉換成字尾表示式,然後再計算最終結果,參考部落格。具體轉化演算法如下 中綴表示式a b c d e f g,其轉換成字尾表示式則為abc de f g 轉換過程需要用到棧,具體過程如下 1 如果遇到運算元,我們就直接將其輸出。2 如果遇到操作符,則我們將其放入到棧...

字尾表示式 逆波蘭表示式 轉換

維基百科 字尾表示式 將中綴表示式轉換為字尾表示式,比如 5 2 8 3 4轉換為5 2 8 3 4 將表示式的字元逐一處理,如果是數字 變數 則直接輸出,如果是字元入棧,並按以下規則進行處理.低優先順序,所以將棧中的所有運算子出棧,之後將自己入棧.or 高優先順序,將棧中的其他乘除運算子出棧,之後...