不同表示式的計算
首先還是需要知道一下關於中綴轉前字尾的方法
具體參考轉換方法
以 (5+2+1✖3)/5 為例
字尾:52+13*+5/
字首:/++52*135
其中,中綴和字尾表示式的計算是重點,字首和字尾計算類似,具體參見**
#include
#include
double
cal_suffix
(char
*str)
;double
cal_preffix
(char
*str)
;double
cal_fix
(char str)
;int
main()
double
cal(
double a,
double b,
char c)
}int
operate
(char c)
}
double
cal_preffix
(char
*str)
else
}return result;
}
double
cal_fix
(char str)
else
stack2[
++top2]
=str[i]
;//運算結束,字元入棧2}}
else
if(str[i]
=='*'
||str[i]
=='/'
)else
stack2[
++top2]
=str[i];}
}else
if(str[i]
=='('
)else
if(str[i]
==')'
) stack2[top2--];
//彈出左括號
}else
//不是操作符直接入棧1
stack1[
++top1]
=str[i]
-'0'
; i++;}
while
(top2!=-1
)return stack1[top1]
;//返回結果
}
double
cal_suffix
(char
*str)
else
i++;}
return result;
}
前,中,字尾表示式
字首表示式,中綴表示式,字尾表示式都是四則運算的表達方式,用以四則運算表示式求值,即數學表示式的求值。比如乙個簡單的數學表示式 1 2 3 4 這是我們常見的數學表示式型別 即中綴表示式 為什麼要將簡單的中綴表示式轉化為複雜的波蘭式或逆波蘭式 原因在於,簡單的中綴表示式在用人的思維邏輯來看,確實簡單...
前 中 字尾表示式
1 字首表示式又稱波蘭式,字首表示式的運算子位於運算元之前 2 舉例說明 3 4 5 6 對應的字首表示式就是 3 4 5 6 從右至左掃瞄表示式,遇到數字時,將數字壓入堆疊,遇到運算子時,彈出棧頂的兩個數,用運算子對它們做相應的計算 棧頂元素 和 次頂元素 並將結果入棧 重複上述過程直到表示式最左...
前 中 字尾表示式的轉換
前 中 字尾表示式的轉換 自然表示式轉換為前 中 字尾表示式,其實是很簡單的。首先將自然表示式按照優先順序順序,構造出與表示式相對應的二叉樹,然後對二叉樹進行前 中 字尾遍歷,即得到前 中 字尾表示式。舉例說明將自然表示式轉換成二叉樹 a b c d 根據表示式的優先順序順序,首先計算 b c 形成...