字首表示式又稱為波蘭表示式,字首表示式的運算子位於運算元之前
(3+4)×5-6
對應的字首表示式就是-×+3456
從右至左掃瞄表示式,遇到數字時,將數字壓入棧中,遇到運算子時,彈出棧頂的兩個數,運算子對他們做相應的計算(棧頂元素和次頂元素),並將結果入棧;重複上述過程知道掃瞄至表示式的最左端,最後運算的出的結果即為表示式的結果
舉例說明:
中綴表示式就是常見的運算表示式,如(3+4)×5-6
中綴表示式的求值是我們人最為熟悉的表示式,但是對計算機來說卻不好操作,因此在計算結果時,往往會將中綴表示式轉成其他表示式來操作(一般轉為字尾表示式)
思路分析
* 將中綴表示式轉成對應的list
* @param s 要轉換的中綴表示式字串
* @return 中綴表示式字元集合
*/public
static list
toinfixexpressionlist
(string s)
else
ls.add(str);}
}while
(i < s.
length()
);return ls;
}/**
* 將得到的中綴表示式對應的list轉換為字尾表示式
* @param infixexpressionlist 中綴表示式的list集合
* @return 字尾表示式的list集合
*/public
static list
parassuffixexpressionlist
(list
infixexpressionlist)
else
if(item.
equals
("("))
else
if(item.
equals
(")"))
s1.pop();
//將左括號彈出棧
}else
s1.push
(item);}
}//將s1中剩餘的運算子依次彈出並加入s2
while
(s1.
size()
!=0)return s2;
}判斷符號優先順序的類
class
operation
return result;
}}
字尾表示式也稱之為逆波蘭表示式,與字首表示式相似,只是運算子位於運算元之後
/** * 將乙個逆波蘭表示式中的字元依次放如arraylist中
* @param suffixexpression 逆波蘭表示式每個字元以空格分割
* @return 只包含數字和符號的逆波蘭表示式字元集合
*/public
static list
getliststring
(string suffixexpression)
return list;
}/**
* 完成對逆波蘭表示式的運算
* 1、從左至右掃瞄,將3和4壓入堆疊
* 2、遇到+運算子,因此彈出4和3(4為棧頂元素3為次頂元素),計算出3+4的值=7,再將7入棧
* 3、將5入棧
* 4、接下來是*運算子,因此彈出5和7,計算出7*5=35,將35入棧
* 5、將6入棧
* 6、最後是-運算子,計算出35-6的值,即29,由此得出最終結果
** @return 返回最終結果
*/public
static
intcalculate
(list
ls)else
else
if(item.
equals
("-"))
else
if(item.
equals
("*"))
else
if(item.
equals
("/"))
else
//把res入棧
stack.
push(""
+res);}
}return integer.
parseint
(stack.
pop());}}
字首 中綴 字尾表示式 逆波蘭表示式
遇到 運算子,因此彈出3和4 3為棧頂元素,4為次頂元素,注意與字尾表示式做比較 計算出3 4的值,得7,再將7入棧 接下來是 運算子,因此彈出7和5,計算出7 5 35,將35入棧 最後是 運算子,計算出35 6的值,即29,由此得出最終結果 從右至左掃瞄中綴表示式 遇到運算元時,將其壓入s2 遇...
字首 中綴 字尾表示式 逆波蘭表示式
字首表示式 中綴表示式 字尾表示式都是四則運算的表達方式,用以四則運算表示式求值 即數學表示式的求職 中綴表示式就是常見的運算表示式,如 3 4 5 6 字首表示式又稱波蘭式,字首表示式的運算子位於運算元之前 比如 3 4 5 6 從右至左掃瞄表示式,遇到數字時,將數字壓入堆疊,遇到運算子時,彈出棧...
字首 中綴 字尾表示式 逆波蘭表示式
字首表示式 中綴表示式 字尾表示式都是四則運算的表達方式,用以四則運算表示式求值,即數學表示式的求值。中綴表示式就是常見的運算表示式,如 3 4 5 6 字首表示式又稱波蘭式,字首表示式的運算子位於運算元之前 比如 3 4 5 6 從右至左掃瞄表示式,遇到數字時,將數字壓入堆疊,遇到運算子時,彈出棧...