数据结构实验之栈二:一般算术表达式转换成后缀式
题目描述
对于一个基于二元运算符的算术表达式,转换为对应的后缀式,并输出之。
输入
输入一个算术表达式,以‘#’字符作为结束标志。
输出
输出该表达式转换所得到的后缀式。
示例输入
a*b+(c-d/e)*f#
示例输出
ab*cde/-f*+
1 #include<stdio.h> 2 #include<string.h> 3 int main() 4 { 5 char s[101],st[101]; 6 int top; 7 top = -1; 8 scanf("%s",s); 9 for(int i = 0; s[i]!= '#'; i++) 10 { 11 if(s[i] >= 'a' && s[i] <= 'z') 12 printf("%c",s[i]);//数字直接输出 13 else if(s[i] == '(') 14 st[++top] = s[i];//左括号直接进栈 15 else if(s[i] == ')') 16 { 17 while(st[top] != '(') 18 { 19 printf("%c",st[top]); 20 top--; 21 } 22 top--; 23 }//将栈中元素输出直到遇到左括号,再将左括号出栈 24 else if(s[i] == '+' || s[i] == '-') 25 { 26 while(top != -1 && st[top] != '(') 27 { 28 printf("%c",st[top]); 29 top--; 30 } 31 st[++top] = s[i];将左括号之后的输出后再将是s[i]进栈。 32 } 33 else if(s[i] == '*' || s[i] == '/') 34 { 35 while(top != -1 && st[top] != '('&&(st[top] == '*'||st[top] == '/')) 36 { 37 printf("%c",st[top]); 38 top--; 39 } 40 st[++top] = s[i]; 41 } 42 } 43 while(top != -1) 44 { 45 printf("%c",st[top]); 46 top--; 47 }最后将栈中元素全部出栈 48 printf("\n"); 49 return 0; 50 }