博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
续前篇-关于逆波兰表达式的计算
阅读量:7230 次
发布时间:2019-06-29

本文共 1703 字,大约阅读时间需要 5 分钟。

相对于逆波兰表达式的转换,逆波兰表达的计算可谓简单不少。

具体计算方法参考:http://www.cnblogs.com/vpoet/p/4659546.html

 

这里也大致梳理一下:

1.新建一个栈将逆波兰表达式的数字依次压入栈中

2.当遇到运算符时,出栈两个数同时将运算结果压栈

3.重复步骤2直到计算计算,栈中的元素即为逆波兰表达式的计算结果。

 

实现如下:

1 #include 
2 #include
3 using namespace std; 4 5 6 int operateprior(char a1) 7 { 8 int prior; 9 10 switch(a1) 11 { 12 case '(': 13 prior=0; 14 break; 15 case ')': 16 prior=0; 17 break; 18 case '+': 19 prior=1; 20 break; 21 case '-': 22 prior=1; 23 break; 24 case '*': 25 prior=2; 26 break; 27 case '/': 28 prior=2; 29 break; 30 case '%': 31 prior=2; 32 break; 33 } 34 return prior; 35 } 36 37 38 char* NiBoLanFun(char* Str) 39 { 40 stack
N; 41 stack
OP; 42 43 while(*Str!='\0') 44 { 45 if(*Str>='0'&&*Str<='9') 46 { 47 N.push(*Str); 48 Str++; 49 } 50 else 51 { 52 if(*Str=='('||OP.empty()) 53 { 54 OP.push(*Str++); 55 } 56 else 57 { 58 if(*Str==')') 59 { 60 while(!OP.empty()) 61 { 62 //cout<<"OP.top="<
<
>str;171 AfterStr=NiBoLanFun(str);172 cout<<"The Trans String is: "<
<

运行截图:

 

注意:

当从栈中弹出两个数据计算的时候应该是考虑两个数的运算顺序当然对于加法乘法运算是没影响的,但

是对于减法除法以及求余运算应该是按照下面的运算顺序:data2/data1 data2-data1 data2%data1

中data2为后出栈的数据,data1为先出栈的数据

转载于:https://www.cnblogs.com/vpoet/p/4674940.html

你可能感兴趣的文章
Linux 权限基础说明
查看>>
2017级面向对象程序设计寒假作业3
查看>>
迭代器
查看>>
Linux OpenCV 静态链接错误
查看>>
Java多线程&集合类-详细版
查看>>
Flask即插视图与tornado比较
查看>>
springboot笔记(一)
查看>>
学习 - SpringMVC
查看>>
logic标签用法
查看>>
MFC中自定义消息
查看>>
hdu 5258 wyh2000 and pupil(dfs)
查看>>
新安装的ubuntu编辑器问题
查看>>
SOJ - 11598
查看>>
[WC2005]双面棋盘(并查集+分治)
查看>>
C#中利用WebBrowser控件,获得HTML源码
查看>>
Android中通过反射获取资源Id
查看>>
Ubuntu Desktop基本办公环境搭建
查看>>
opensuse 13.1 中如何使用yong中文输入法
查看>>
c++堆栈区别
查看>>
HDU 4272 LianLianKan [状态压缩DP]
查看>>