C++實現逆波蘭式
阿新 • • 發佈:2020-11-02
(a+b)c的逆波蘭式為ab+c,假設計算機把ab+c按從左到右的順序壓入棧中,並且按照遇到運算子就把棧頂兩個元素出棧,執行運算,得到的結果再入棧的原則來進行處理,那麼ab+c的執行結果如下:
1)a入棧(0位置)
2)b入棧(1位置)
3)遇到運算子“+”,將a和b出棧,執行a+b的操作,得到結果d=a+b,再將d入棧(0位置)
4)c入棧(1位置)
5)遇到運算子“”,將d和c出棧,執行dc的操作,得到結果e,再將e入棧(0位置)
經過以上運算,計算機就可以得到(a+b)*c的運算結果e了。
逆波蘭式除了可以實現上述型別的運算,它還可以派生出許多新的演算法,資料結構,這就需要靈活運用了。逆波蘭式只是一種序列體現形式。
eg:
輸入示例
1 2 + 3 4 - *
輸出示例
-3
程式碼
#include <iostream> #include <stack> #include <cstdio> using namespace std; int main() { string s; getline(cin,s); int n = s.length();//字串長度 stack<int> t; for(int i=0;i<n;i++) { char c=s[i]; if(c=='+'){ int a=t.top(); t.pop(); int b=t.top(); t.pop(); t.push(a+b); } else if(c=='-'){ int a=t.top(); t.pop(); int b=t.top(); t.pop(); t.push(b-a); } else if(c=='*'){ int a=t.top(); t.pop(); int b=t.top(); t.pop(); t.push(a*b); } else if(c=='/'){ int a=t.top(); t.pop(); int b=t.top(); t.pop(); t.push(a/b); } else if(c==' '){ continue; } else{//數字 int m=(int)c; m=m-48; t.push(m); } } cout<<t.top(); return 0; }
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。