說到字尾表示式就得從入棧出棧開始說起,當資料全部寫入到棧(陣列)之後,當碰到乙個運算子的時候,若碰到比這個運算子優先順序更低得運算子的時候,先讓那些優先順序低得運算子出棧,然後讓這個優先順序最高的運算子入棧,以此類推,直到運算子全部正確入棧。
碰到此類題目,最好的辦法就是根據優先順序加括號,接下來由我演示一下:
解: 1.先一層一層的加括號
x=(a +( (b*(c-d))/e))
然後就是從最裡面開始往外面去括號,括號的意思是:左括號表示入棧,右括號表示出棧。去掉括號後資料向左靠齊,所以第一次去掉括號之後式子就是:x=(a+((b*(cd-))/e)),繼續,x=(a+((bcd-*)/e));剛才資料都是在括號左邊,所以都是向左靠齊,接下來的e在括號右邊,去掉括號之後應加在原式的後面,x=(a+(bcd-*e/)),一樣的,繼續x=(abcd-*e/+),最後把等號也變過來,式子的最終結果也就是xabcd-*e/+=,也就得到了我們的字尾表示式。
看完之後是不是有一種茅塞頓開的感覺呢?利用這種辦法,既快速又準確,如果覺得剛才的題目過於簡單,接下來這一道會稍微難一點,式子也會稍微長一些,但還是用剛才所說的技巧,萬變不離其宗。請往下面看:
a+b*c+(d*e+f)*g
解題思路:第一步還是老規矩,加括號,只是這次的括號有些多,千萬別加錯了哦。(a+(b*c)+(((d*e)+f)*g))
這次就不再那麼詳細的講了,都是同樣的套路,(a+b*c+(de*f+g*))—–>(abc*+de*f+g*+ ),不過這次一定要仔細,加法是從左到右依次執行的,先變換後面的乘法,變換完了之後3個直接相加,再一變換就變成了我們想要的結果。
中綴表示式轉換字尾表示式
中綴表示式是最自然 最易被人類理解的表達方式,但是計算機處理起來並不顯得方便,這時,字尾表示式就發揮作用了 例如 計算表示式 a b c d 的值,程式裡需要不斷的判斷運算子的優先順序,先計算括號裡的子表示式 假如我們將上述表示式轉換為字尾表示式 a b c d 你會發現現在是不需要括號了 這時我們...
表示式轉換 中綴表示式轉換為字尾表示式
算術表示式有字首表示法 中綴表示法和字尾表示法等形式。日常使用的算術表示式是採用中綴表示法,即二元運算子位於兩個運算數中間。請設計程式將中綴表示式轉換為字尾表示式。輸入格式 輸入在一行中給出不含空格的中綴表示式,可包含 以及左右括號 表示式不超過20個字元。輸出格式 在一行中輸出轉換後的字尾表示式,...
中綴表示式轉換為字尾表示式
今天我們課前談一談,要說點什麼好呢?最近小甲魚發現,很多魚油在學習資料結構和演算法的時候積極性已經開始有點下降了。甚至很多朋友懷疑資料結構和演算法到底有沒有用?實話說,在大廈的防震設計 消除疾病 防止水源枯竭這些實際問題中,很遺憾,資料結構和演算法幾乎起不到任何直接作用。那為什麼我們要學呢?很簡單,...