[SPOJ]算数表达式转换成逆波兰式
来源:互联网 发布:如何评价列宁 知乎 编辑:程序博客网 时间:2024/04/28 15:38
本人脑筋不太灵光,做些题目练练脑子吧。。。。T T
贴上找到的链接。感谢。
http://blog.csdn.net/sunmenggmail/article/details/7888723
核心思想:算数运算符栈中优先级越高的越在栈顶
#include <iostream>#include <string.h>#include <stack>using namespace std;stack<int> s1,s2;int compare(char c,char d){int result;switch(c){case '^':switch(d){case '+' : result = 1; break;case '-' : result = 1; break;case '*' : result = 1; break;case '/' : result = 1; break;case '^': result = 0; break;}case '+':case '-':switch(d) {case '+' : result = 0; break;case '-' : result = 0; break;case '*' : result = -1; break;case '/' : result = -1; break;case '^': result = -1; break;}break;case '*':case '/':switch (d){case '+' : result = 1; break;case '-' : result = 1; break;case '*' : result = 0; break;case '/' : result = 0; break;case '^': result = -1; break;}break;}return result;}void pop_out(){char t;do {t = s1.top();s1.pop();if( t != '(' ) {s2.push(t);} else {break;}}while(true);}void calc(char op){do {if( s1.empty() ) break;char t_op = s1.top();if( op !='(' && t_op !='(' && compare(op,t_op) < 0 ){s1.pop();s2.push(t_op);} else {break;}}while(true);}int main(){char expression[1024];int n;scanf("%d",&n);while(n--){scanf("%s",expression);int i = 0;int ex_len = strlen(expression);for(i=0;i<ex_len;i++) {if(expression[i] >='a' && expression[i] <= 'z') {s2.push(expression[i]);} else {switch (expression[i]){case '(':s1.push(expression[i]);break;case ')':pop_out();break;default:calc(expression[i]);s1.push(expression[i]);break;}}}while(!s1.empty()) {char t = s1.top();s1.pop();s2.push(t);}i = 0;while(!s2.empty()) {expression[i++] = s2.top();s2.pop();}expression[i] = 0;for(i=strlen(expression)-1;i>=0;i--){printf("%c",expression[i]);}printf("\n");}return 0;}
- [SPOJ]算数表达式转换成逆波兰式
- 逆波兰算数表达式
- 将表达式转换成逆波兰式
- 将表达式转换成逆波兰式
- 将表达式转换成逆波兰式
- 将表达式转换成逆波兰式
- 将表达式转换成逆波兰式
- 利用逆波兰表达式求算数表达式的值
- 中缀式转换为逆波兰表达式
- 【数据结构】中缀表达式转换后缀表达式(逆波兰式)
- 前缀式(波兰式)与后缀式(逆波兰式)求解表达式的值,中缀式(一般算数表达式不做讨论)
- 一般算数表达式转换成后缀式问题
- 将表达式转换为逆波兰表达式
- 将表达式转换为逆波兰表达式
- 波兰、逆波兰表达式
- 逆波兰式转换
- 递归实现逆波兰式到正常表达式的转换
- 中缀表达式和逆波兰式的相互转换
- 程序员的学习和积累
- python 学习交流
- [UNIX C学习笔记] 从今天起~ 开始学习UNIX 环境编程,MARK一下,以示决心~
- C++复制控制
- U.S. Government Closes 64 More Data Centers
- [SPOJ]算数表达式转换成逆波兰式
- Winsock网络编程接口
- 复杂的C 语言声明
- vmware workstation + xen + ubuntu 12.04(Dom 0)环境搭建
- 嵌入式linux应用开发完全手册 关于pc为什么指向下两条指令的位置问题
- JDK5.0中注释(Annotation)的用法
- 黑马程序员_java 进制转换
- 成绩处理器!!!
- SSH框架学习(一、建立web项目)