您的位置:首页 > 理论基础 > 数据结构算法

数据结构实验之栈二:一般算术表达式转换成后缀式

2013-06-24 01:29 375 查看

题目描述

对于一个基于二元运算符的算术表达式,转换为对应的后缀式,并输出之。

输入

输入一个算术表达式,以‘#’字符作为结束标志。

输出

输出该表达式转换所得到的后缀式。

示例输入

a*b+(c-d/e)*f#


示例输出

ab*cde/-f*+


#include<stdio.h>
#include<string.h>
int main()
{
char s[101],st[101];
int top;
top = -1;
scanf("%s",s);
for(int i = 0; s[i]!= '#'; i++)
{
if(s[i] >= 'a' && s[i] <= 'z')
printf("%c",s[i]);//数字直接输出
else if(s[i] == '(')
st[++top] = s[i];//左括号直接进栈
else if(s[i] == ')')
{
while(st[top] != '(')
{
printf("%c",st[top]);
top--;
}
top--;
}//将栈中元素输出直到遇到左括号,再将左括号出栈
else if(s[i] == '+' || s[i] == '-')
{
while(top != -1 && st[top] != '(')
{
printf("%c",st[top]);
top--;
}
st[++top] = s[i];将左括号之后的输出后再将是s[i]进栈。
}
else if(s[i] == '*' || s[i] == '/')
{
while(top != -1 && st[top] != '('&&(st[top] == '*'||st[top] == '/'))
{
printf("%c",st[top]);
top--;
}
st[++top] = s[i];
}
}
while(top != -1)
{
printf("%c",st[top]);
top--;
}最后将栈中元素全部出栈
printf("\n");
return 0;
}


View Code
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: