数据结构实验之栈二:一般算术表达式转换成后缀式
Description
对于一个基于二元运算符的算术表达式,转换为对应的后缀式,并输出之。
Input
输入一个算术表达式,以‘#’字符作为结束标志。
Output
输出该表达式转换所得到的后缀式。
Sample Input
a*b+(c-d/e)*f#
Sample Output
ab*cde/-f*+
Hint
#include<stdio.h>
#include<ctype.h>
int cpa(char ch){
switch(ch){
case '(': return 0;
case '+':
case '-':
return 1;
case '*':
case '/':
return 2;
case ')':
return 3;
}
}
int main(){
char shi[1000], str;
int front=0;
while(scanf("%c", &str), str != '#') {
if(isalpha(str))
printf("%c", str);
else {
if(front==0) shi[++front] = str;
else{
if(cpa(str)==0)
shi[++front] = str;
else if(cpa(str)==3) {
while(shi[front]!='(')
{ printf("%c", shi[front]); front--; }
front--;
}
else if(cpa(str) <= cpa(shi[front]) ) {
printf("%c", shi[front]);
front--;
shi[++front] = str;
}
else //其余情况为<span style="font-family: 'times new roman';">cpa(str) > cpa(shi[front])</span>
shi[++front] = str;
}
}
}
while(front!=0) {
printf("%c", shi[front]);
front--;
}
printf("
");
return 0;
}