数据结构实验之栈二:一般算术表达式转换成后缀式
数据结构实验之栈二:一般算术表达式转换成后缀式
Time Limit: 1000MS Memory limit: 65536K
题目描述
对于一个基于二元运算符的算术表达式,转换为对应的后缀式,并输出之。
输入
输入一个算术表达式,以‘#’字符作为结束标志。
输出
输出该表达式转换所得到的后缀式。
示例输入
a*b+(c-d/e)*f#
示例输出
ab*cde/-f*+
提示
来源
示例程序
#include <stdio.h> #include <stdlib.h> #include <string.h> int f(char ch, char sh) { if(sh=='(') return 1; if( (ch=='*' || ch=='/' || ch=='%')&&( sh=='+' || sh=='-') ) return 1; else return -1; } int main() { int i = 0 , top = -1 ; char exp[1000] , str[1000] , ch ; while(scanf("%c", &ch) && ch != '#') { if(ch >= 'a' && ch <='z') exp[i++] = ch ; else if(ch=='(') str[++top] = ch ; else if(ch==')') { while(top!=-1) { exp[i++] = str[top]; top--; if(str[top]=='(') { top--; break; } } } else { if(top == -1 || f(ch,str[top]) > 0 ) str[++top] = ch ; else { while(top >=0 && f(ch,str[top]) < 0 ) { exp[i++] = str[top--]; } str[++top] = ch ; } } } while(top != -1) { exp[i++] = str[top--]; } exp[i] = '\0'; printf("%s\n", exp); return 0; }

浙公网安备 33010602011771号