前缀表达式详细解释以及代码展现
生活随笔
收集整理的這篇文章主要介紹了
前缀表达式详细解释以及代码展现
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
目錄
1:前綴表達式解釋
2:前綴表達式代碼展現
1:前綴表達式解釋
前綴表達式是什么呢?平時我們用的表達式是8+8-9=7這樣子的表達式,這個叫中綴表達式,是我們平時所用的表達式,有中自然就有前和后了,但是這篇文章我們只講前綴表達式滴。
前綴表達式我們的一般樣子是: +? +? 2? ?*? ?3? -? 7? 4? /? 8? ?4
將它轉換成中綴表達式為2+3*(7-4)+8/4
那么該如何轉換呢,這里就要用到棧的知識(先進后出)
從右往左開始(你問我為什么,嘿嘿我也不知道)遇到數字4進棧,繼續,遇到8進棧,繼續,遇到了符號? /,這時候就要開始計算了,將棧頂元素8彈出,然后在彈出棧頂元素4,計算8/4=2,那么計算結果2進棧,現在棧內只有2了,繼續,遇到4,進棧,棧中{4,2},繼續,7進棧,棧中{7,4,2},繼續,遇到符號-,取出棧頂元素7,彈出,再取一個棧頂元素4,在彈出,計算7-4=3,將計算結果3進棧,棧中{3,2},繼續,3進棧,棧中{3,3,2},繼續,遇到? *,還是彈出棧頂元素,然后再彈出一個棧頂元素,計算,3*3=9,將計算結果9進棧,棧中{9,2},繼續,2進棧,棧中{2,9,2},繼續,遇到 +,還是彈出棧頂元素,在彈出一個棧頂元素,進行計算,2+9=11,將計算結果11進棧,棧中{11,2},繼續,遇到+,計算棧中僅存的2個元素了,11+2=13。
這就是前綴表達式的一個具體思路了,更細節的話還有什么括號啊,符號和數字數不匹配啊,無法形成中綴表達式計算等等就不討論了,這里我主要是教會大家什么是前綴表達式,如何理解前綴表達式的。
2:前綴表達式代碼展現
#include<bits/stdc++.h> using namespace std; string s; int main() {stack<int>q;getline(cin,s);int l=s.size();int f=0;for(int i=l-1;i>=0;i--){if(s[i]=='+'||s[i]=='-'||s[i]=='*'||s[i]=='/'){if(q.size()<2){f=1;break;}int sum;int n1=q.top();q.pop();int n2=q.top();q.pop();if(s[i]=='+')sum=n1+n2;else if(s[i]=='-')sum=n1-n2;else if(s[i]=='*')sum=n1*n2;else if(s[i]=='/'){if(n2==0){f=1;break;}else{sum=n1/n2;}}q.push(sum);}else if(s[i]==' ')continue;//空格進行下一次的循環else{//數int a=s[i]-'0';//從字符型轉換成整型q.push(a);}}if(q.size()!=1)f=1;if(q.size()==1)cout<<q.top();if(f==1){cout<<"ERROR";return 0;}return 0; }?
?
總結
以上是生活随笔為你收集整理的前缀表达式详细解释以及代码展现的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Safety-Gym环境配置与安装
- 下一篇: java list集合合并_JAVA L