数据结构:前缀,中缀,后缀表达式(逆波兰表达式)
前綴表達式(波蘭表達式)
? 前綴表達式的運算符位于操作數之前。
? 比如 (1+2)*3-4 ?對應的前綴表達式就是: - * + 1 2 3 4
? ?前綴表達式的計算機求值
? ? 從右至左掃描表達式,遇到數字時,就將數字壓入棧頂,遇到運算符時,彈出棧頂的兩個數,用運算符對它們做相應的計算(棧頂元素和次頂元素),并將結果入棧;重復上述過程直到表達式最左端,最后運算得出的值即為表達式的結果。
例如: (1+2)*3-4對應的前綴表達式就是 - * + 1 2 3 4, 針對前綴表達式求值步驟如下:
? 1). 從右至左掃描, 將4?3?2?1壓入堆棧.
? 2). 遇到+運算符,因此彈出1和2(1位棧頂元素,2位次頂元素),計算出1+2的值,得3,再將3入棧
? 3). 接下來是*運算符,因此彈出3和3,計算出3*3=9,將9壓入棧
? 4). 最后是 - 運算符,計算出9-4的值,即5,由此得出最終結果.
中綴表達式?
? ??中綴表達式就是我們最常見的運算表達式, (1+2)*3-4.
? ??中綴表達式是人們最常見的形式, 但對計算機來說卻不好操作,因此往往會把中綴表達式轉成其他表達式來操作(一般是后綴表達式)
后綴表達式(逆波蘭表達式)
? 同前置表達式相似,只是運算符位于操作數之后。
??(1+2)*3-4的后綴表達式就是1 2 + 3 * 4 -?
? 正常表達式 ?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 + =
???后綴表達式的計算機求值
? ? ? 從左至右掃描表達式,遇到數字時,就將數字壓入棧頂,遇到運算符時,彈出棧頂的兩個數,用運算符對它們做相應的計算(棧頂元素和次頂元素),并將結果入棧;重復上述過程直到表達式最右端,最后運算得出的值即為表達式的結果。
例如: (1+2)*3-4對應的后綴表達式就是1 2 + 3 * 4 -, 針對前綴表達式求值步驟如下:
? 1). 從左至右掃描, 將1 2壓入堆棧.
? 2). 遇到+運算符,因此彈出2和1(2位棧頂元素,1位次頂元素),計算出1+2的值,得3,再將3入棧
? 3) 將3入棧.
? 4) 接下來是*運算符,因此彈出3和3,計算出3*3=9,將9入棧.
? 5) 將4入棧
? 6). 最后是 - 運算符,計算出9-4的值,即5,由此得出最終結果.
?
?
?
總結
以上是生活随笔為你收集整理的数据结构:前缀,中缀,后缀表达式(逆波兰表达式)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java:不可变类
- 下一篇: java: String的==与equa