求解逆波兰表达式的值,回文数字的判断&&栈的应用

网友投稿 1318 2022-08-27

求解逆波兰表达式的值,回文数字的判断&&栈的应用

求解逆波兰表达式的值,回文数字的判断&&栈的应用

常规数学表达式的前缀表达式称为波兰表示式,后缀表达式又称逆波兰表达式。对于逆波兰表达式的求解可借助于栈,把数字全部压入栈中,遇到计算符号再弹出两个数,计算结果压入栈中,重复这个过程,最后的数字就是计算结果。

例子: 3-(4+8/2)*3=-21    48/3+12-6*2+7=23

输入文件内容:

3 4 8 2 / + 3 * - EOF 48 3 / 12 + 6 2 * - 7 + EOF

#include #include#includeusing namespace std; bool judge(int x){ if(x=='+'||x=='-'||x=='*'||x=='/')return true; return false;}int solve(){ int stack[101],top=0; char a[20]; //'+'-->43 '-'-->45 '*'-->42 '/'-->47 ' '-->32 '0'-->48 '\n'-->10 while(~scanf("%s",&a)){ if(a[0]==' ')continue; if(a[0]=='E')break; int b=atoi(a); if(judge(a[0])){ int q2=stack[top--],q1=stack[top--],q3; if(a[0]=='+')q3=q1+q2; else if(a[0]=='-')q3=q1-q2; else if(a[0]=='*')q3=q1*q2; else q3=q1/q2; stack[++top]=q3; } else stack[++top]=b; //for(int i=1;i<=top;i++)cout<

回文数字:反着念和正着念的结果一样。这又和栈联系到了一起。把数字存储到栈中,如果新的数字和栈顶数字一样或新的数字和栈顶数字的“顶下"数字一样,那么涉及的数字都弹出,若栈中没有了数字则是一个回文数,否则不是。

回文数字的判断:

int stack[151],top=0;bool judge(){ top=0; int a; while(cin>>a){ if(a==-1)break; if(top>0&&a==stack[top])top--; else if(top>1&&a==stack[top-1]){ top=top-2; } else stack[++top]=a; } if(top==0)return true; else return false;}

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:图的拓扑排序
下一篇:网络编程常用知识
相关文章

 发表评论

暂时没有评论,来抢沙发吧~