如何把中缀表达式变成后缀表达式
2014-10-16 16:07
357 查看
//规则:从左到右遍历表达式的每个数字和符号,遇到是数字就进栈,遇到是符号,就将处于栈顶两个数出栈,进而运算,运算结果进栈,一直到最终获///得结果
/*empty() 堆栈为空则返回真 pop() 移除栈顶元素(不会返回栈顶元素的值) push() 在栈顶增加元素 size() 返回栈中元素数目 top() 返回栈顶元素[1]*/ #include "stdafx.h" #include "iostream" #include <stack> using namespace std; //函数功能:判断输入字符是加减还是乘除 //函数输入:字符 //函数返回:1或2或0 int prior(char op) { if (op == '+' || op == '-') return 1; if (op == '*' || op == '/') return 2; return 0; } //函数功能:中缀转化为后缀 //函数输入:字符串地址 //函数返回:无 void houzhui(char* a) { stack<char> op; //定义一个栈 //对字符串进行遍历 while (*a != '\0') { //如果是数字就直接输出 if (*a >= '0' && *a <= '9' || *a == '.') cout << *a; //如果不是就进行判断 else { //如果是‘(’,就在栈里加入‘(’ if (*a == '(') op.push('('); //继续往下走 else { //如果是‘)’ if (*a == ')') { //输出括号中的内容 while (op.top() != '(') { cout << op.top(); op.pop(); } //删除‘(’ op.pop(); } //继续往下走 else { //如果空了直接加去、进去 if (op.empty()) op.push(*a); //里面有东西 else { //如果后进来的优先级大于栈顶元素的优先级,则加进去 if (prior(*a) > prior(op.top())) op.push(*a); //如果后进来的元素优先级小于或者等于栈顶元素,那么就输出来直到栈为空,把后进来的元素加进去 else { while (!op.empty() && prior(*a) <= prior(op.top())) { cout << op.top(); op.pop(); } op.push(*a); } } } } } a++; } //到最后如果还有元素都输出来 while (!op.empty()) { cout << op.top(); op.pop(); } } int _tmain(int argc, _TCHAR* argv[]) { char *a = "9+(3-1)*3+10/2"; houzhui(a); getchar(); }(以下内容转的)
35,15,+,80,70,-,*,20,/ //后缀表达方式
(((35+15)*(80-70))/20)=25 //中缀表达方式
/,*,+,35,15,-,80,70, 20 //前缀表达方式
人的思维方式很容易固定~~!正如习惯拉10进制。就对2,3,4,8,16
等进制不知所措一样~~!
人们习惯的运算方式是中缀表达式。而碰到前缀,后缀方式。。迷茫
其实仅仅是一种表达式子的方式而已(不被你习惯的方式)
我这里教你一种也许你老师都没跟你讲的简单转换方式
一个中缀式到其他式子的转换方法~~
这里我给出一个中缀表达式~
a+b*c-(d+e)
第一步:按照运算符的优先级对所有的运算单位加括号~
式子变成拉:((a+(b*c))-(d+e))
第二步:转换前缀与后缀表达式
前缀:把运算符号移动到对应的括号前面
则变成拉:-( +(a *(bc)) +(de))
把括号去掉:-+a*bc+de 前缀式子出现
后缀:把运算符号移动到对应的括号后面
则变成拉:((a(bc)* )- (de)+ )-
把括号去掉:abc*-de+- 后缀式子出现
发现没有,前缀式,后缀式是不需要用括号来进行优先级的确定的。
如果你习惯拉他的运算方法。计算的时候也就是从两个操作数的前面
或者后面找运算符。而不是中间找,那么也就直接可以口算拉
相关文章推荐
- 中缀表达式变成后缀表达式
- 中缀表达式如何转为后缀表达式
- 中缀表达式变成等价的后缀表达式的算法
- 中缀表达式变成等价的后缀表达式的算法
- C++堆栈 如何把中缀表达式转换为后缀表达式——读书笔记
- 将中缀表达式转换成后缀表达式的三种方 法
- 中缀表达式转换成前缀表达式和后缀表达式 --技巧
- 中缀表达式转后缀表达式
- 中缀表达式转换成前缀表达式和后缀表达式
- 中缀表达式转为后缀表达式以及后缀表达式的计算
- 中缀表达式/前缀表达式/后缀表达式 的计算方法
- .net表达式计算器(中缀表达式转后缀表达式,支持20多个数学函数,支持函数嵌套,免费共享~)
- 中缀表达式转后缀表达式
- java将中缀表达式转为后缀表达式
- 栈的应用— 中缀表达式到后缀表达式的转换
- [ZZ]中缀表达式转换成前缀表达式和后缀表达式
- C用栈实现中缀表达式转后缀表达式
- 计算器实现---中缀表达式转后缀表达式
- 中缀表达式转换成后缀表达式的实现(VB)
- 中缀表达式转为后缀表达式