数据结构实验之栈与队列二:一般算术表达式转换成后缀式
Time Limit: 1000MS
Memory Limit: 65536KB
Problem Description
对于一个基于二元运算符的算术表达式,转换为对应的后缀式,并输出之。
Input
输入一个算术表达式,以‘#’字符作为结束标志。
Output
输出该表达式转换所得到的后缀式。
Example Input
a*b+(c-d/e)*f#
Example Output
ab*cde/-f*+
代码:
#include<iostream>
#include<stack>
using namespace std;
stack<char> s;
int compare(char a,char b)
{
if(b=='@')
return 0;
if( (a=='*'||a=='/')&&(b=='+'||b=='-') || (b=='(') )
return 1;
else
return -1;
}
int main()
{
char c;
s.push('@');
while(cin>>c&&c!='#')
{
if(c>='a'&&c<='z')
cout<<c;
else if(c=='(')
{
s.push('(');
}
else if(c==')')
{
while(s.top()!='(')
{
cout<<s.top();
s.pop();
}
s.pop();
}
else
{
if(compare(c,s.top())==1)
s.push(c);
else if(compare(c,s.top())==-1)
{
cout<<s.top();
s.pop();
s.push(c);
}
else
{
s.pop();
s.push(c);
}
}
}
while(!s.empty())
{
cout<<s.top();
s.pop();
}
return 0;
}