中缀表达式 转换为 后缀表达式
来源:互联网 发布:python unittest 回滚 编辑:程序博客网 时间:2024/06/03 22:58
中缀表达式到后缀表达式的转换
1.中缀表达式与后缀表达式的异同:中缀表达式和表达式是由运算符和数字组合起来的表达式,所不同的是,中缀表达式运算符在运算对象中间,而且它的计算是按照优先级和运算符的结合性来计算的。而后缀表达式运算符是在运算对象后面,计算是按照从左到右计算的。
给一个例子 a + b * c + c * d , 后缀表达式会依次算b*c,c*d, a + b * c , a + b * c + c * d。而中缀表达式会先算b*c, a + b * c, c * d, a + b * c + c * d。 不难得出后缀表达式与我们的常用的计算顺序是不同的。因此我们必须来看一下它到底是如何计算的,是否会影响计算结果
2.后缀表达式的计算:从左到右的运算符,若遇到比它优先级高或者等于的预算符的Set,就先算之前的所有set运算符,并且优先级从大到小算,并且去掉已经算过的运算符 。比如a + b * c + c * d,从左到右为+, *, +,因为此时的*, +优先级大于+,所以算+,*,此时未用运算符为+,再次寻找,有*。此时再无运算符,因此将所有的运算符按照优先级大小计算。
3.不难看出,未用的是按照优先级从小到大排列,然而取出是按照从大到小,因此,符合“后进先出”栈的策略
4.因此用栈来保存未运算的符号
5.中缀表达式转后缀表达式的算法请自行百度。其实如果你认真想了上述所言,就知道怎么弄出算法了。切记,后缀表达式和我们平常所采用的计算策略是有差别的
6.下面为代码
bool first( char op ){ return op == '*' || op == '/' || op == '%';}bool noLess( char firstOp, char secOp ){ return first( firstOp ) || !first( secOp );}string transform( string in ){ string post = in; int indexPost = 0; stack<char> work; int cou = 0; for( int i = 0; i < in.size( ); ++i ) { if( isalpha( in[ i ] ) ) { post[ indexPost++ ] = in[ i ]; } else if( in[ i ] == '(' ) { ++cou; work.push( in[ i ] ); } else if( in[ i ] == ')' ) { while( work.top( ) != '(' ) { post[ indexPost++ ] = work.top( ); work.pop( ); } work.pop( ); } else { while( !work.empty( ) && noLess( work.top( ), in[ i ] ) && work.top( ) != '(' ) { post[ indexPost++ ] = work.top( ); work.pop( ); } work.push( in[ i ] ); } } while( !work.empty( ) ) { post[ indexPost++ ] = work.top( ); work.pop( ); } post.resize( post.size( ) - 2 * cou ); return post;}
阅读全文
1 0
- 中缀表达式转换为后缀表达式(C)
- 中缀表达式转换为后缀表达式算法
- 中缀表达式转换为后缀表达式
- 中缀表达式转换为后缀表达式
- 中缀表达式转换为后缀表达式
- 中缀表达式转换为后缀表达式
- 中缀表达式转换为后缀表达式
- 中缀表达式转换为后缀表达式
- 中缀表达式转换为后缀表达式
- 中缀表达式转换为后缀表达式
- 中缀表达式转换为后缀表达式
- 中缀表达式转换为后缀表达式
- 中缀表达式转换为后缀表达式
- 中缀表达式转换为后缀表达式
- 中缀表达式转换为后缀表达式
- 中缀表达式转换为后缀表达式
- 中缀表达式转换为后缀表达式
- 中缀表达式转换为后缀表达式
- IO多路复用之epoll总结
- C#回顾学习笔记三十三:partial部分类
- axis服务端开发遇到的问题
- effective java(11) 之谨慎地覆盖clone
- 计算机网络
- 中缀表达式 转换为 后缀表达式
- SnapKit的扩展--添加数组控制约束,和九宫格布局,等宽,等间距等布局方式
- servlet使用
- 多协议接口性能测试
- Linux操作系统安装步骤
- 算法实验报告1
- iOS 修改app名称
- MyBatis(2)SqlSession的工作原理
- 输入一行字符,分别统计出其中英文字母、空格、数字和其他字符的个数。