中缀表达式转换为后缀表达式的算法
来源:互联网 发布:丧尸围城2优化补丁 编辑:程序博客网 时间:2024/06/07 03:44
中缀表达式转换为后缀表达式的算法
中缀表达式与后缀表达式
(1) 中缀表达式
表达形式是运算符在两个操作符之间(例如:4+5),它适合人的阅读和计算习惯对机器相对复杂
(2) 后缀表达式
表达形式是运算符在两个操作符之后(例如:4 5 +),它适合计算机的计算中缀表达式转换为后缀表达式的算法
(1)从左向右逐个遍历中缀表达式;
(2)若字符是数字,则存入后缀表达式;
(3)若字符是’(‘,则存入栈;
(4)若字符是’)’,则从栈顶依次逐个读取并删除栈顶元素后,将栈顶元素存入后缀表达式,直到值是’(‘,从栈中除’(‘;
(5)若字符是’’或’/’
如果栈顶元素优先级比’(‘高,就直接入栈;
否则从栈顶依次逐个读取并删除栈顶元素后,将栈顶元素存入后缀表达式,直至遇到优先级比它低或值为’(‘,字符 入栈;
(6)若字符是’+’或’-‘
如果栈顶元素优先级比’(‘高,就直接入栈;
否则从栈顶依次逐个读取并删除栈顶元素后,将栈顶元素存入后缀表达式,直至值为’(‘,字符入栈;举例( 4(5+6)-7+8 )
4 |
4 |
4 | (
4 5 | * (
4 5 | * ( +
4 5 6 | * ( +
4 5 6 + |
4 5 6 + | -
4 5 6 + * 7 | -
4 5 6 + * 7 - | +
4 5 6 + * 7 - 8 | +
4 5 6 + * 7 - 8 + |
(用’|’隔开后缀表达式和栈)代码
/*中缀表达式的格式:每个数字后面加'.'(举例:4.+5.*(6.+7.))*/void ExpMidToExpBak(char * expMiddle,char * expBack){ STACK1 S1;//建立一个存储字符的栈 int i = 0; int j = 0; char ch; InitStack(&S1);//初始化栈 while('\0' != expMiddle[i]) { if(isdigit(expMiddle[i]))//判断是否是数字 { do { expBack[j] = expMiddle[i]; j++; i++; }while('.' != expMiddle[i]); expBack[j] = '.'; j++; } else if('(' == expMiddle[i]) { PushStack(&S1,expMiddle[i]);//将字符压入栈 } else if(')' == expMiddle[i]) { GetDelTop(&S1,&ch);//获取并删除栈顶元素 while('(' != ch) { expBack[j] = ch; j++; GetDelTop(&S1,&ch); } } else if('*' == expMiddle[i] || '/' == expMiddle[i]) { if(!EmptyStack(&S1))//判断栈是否为空 { ch = GetTop(&S1);//读取栈顶元素 while(1) { expBack[j] = ch; j++; PopStack(&S1);//出栈 if(EmptyStack(&S1)) { break; } else { ch = GetTop(&S1); } } } PushStack(&S1,expMiddle[i]); } else if('+' == expMiddle[i] || '-' == expMiddle[i]) { if(!EmptyStack(&S1)) { ch = GetTop(&S1); while('(' != ch) { expBack[j] = ch; j++; PopStack(&S1); if(EmptyStack(&S1)) { break; } else { ch = GetTop(&S1); } } } PushStack(&S1,expMiddle[i]); } i++; } while(!EmptyStack(&S1)) { GetDelTop(&S1,&expBack[j++]); } expBack[j]='\0';//必须加入字符串的结束符是'\0' return;}
1 0
- 中缀表达式转换为后缀表达式算法
- 中缀表达式转换为后缀表达式的算法
- 中缀表达式转换为后缀表达式的算法
- 中缀表达式转换为前缀后缀表达式的算法流程图
- 中缀表达式转换为后缀表达式&后缀表达式的计算
- 中缀表达式转换为后缀表达式(C)
- 中缀表达式转换为后缀表达式
- 中缀表达式转换为后缀表达式
- 中缀表达式转换为后缀表达式
- 中缀表达式转换为后缀表达式
- 中缀表达式转换为后缀表达式
- 中缀表达式转换为后缀表达式
- 中缀表达式转换为后缀表达式
- 中缀表达式转换为后缀表达式
- 中缀表达式转换为后缀表达式
- 中缀表达式转换为后缀表达式
- 中缀表达式转换为后缀表达式
- 中缀表达式转换为后缀表达式
- bzoj 4516: [Sdoi2016]生成魔咒 后缀数组
- 【总结】CDQ分治
- 数组 大佛勿喷
- hdoj 4506 小明系列故事——师兄帮帮忙<二分求幂>
- Java基础篇(泛型<T>常见用法)
- 中缀表达式转换为后缀表达式的算法
- LeetCode 304. Range Sum Query 2D - Immutable(矩阵求和)
- 10007---全文检索引擎Solr系列——整合MySQL、MongoDB
- 练习合成
- google地图 MapFragment
- 有return的情况下try catch finally的执行顺序
- 数据处理(一)
- LeetCode 111. Minimum Depth of Binary Tree
- 菲波拉契数列