# include <iostream>
#define MAXsize 30
#define Stksize 20
int icp(char op)
{
switch (op)
{
case '#': return 0; break;
case '(': return 6; break;
case '*': return 4; break;
case '/': return 4; break;
case '+': return 2; break;
case '-': return 2; break;
case ')': return 1; break;
}
}
int isp(char op)
{
switch (op)
{
case '#': return 0; break;
case '(': return 1; break;
case '*': return 5; break;
case '/': return 5; break;
case '+': return 3; break;
case '-': return 3; break;
case ')': return 6; break;
}
}
void infix_to_Postfix(char INfix[], char Postfix[])
{
char OPSK[Stksize]; int top = -1;
OPSK[++top] = '#';
int i = 0, j = 0;
char ch = INfix[i++];
while (ch != '#'||top != -1)
{
if (ch >= '0'&&ch <= '9')
{
Postfix[j++] = ch;
ch = INfix[i++];
}
else
{
char op = OPSK[top];
if (isp(op) < icp(ch)) {
OPSK[++top] = ch;
ch = INfix[i++];
}
else if (isp(op) > icp(ch)) {
Postfix[j++] = OPSK[top--];
}
else
{
char temp= OPSK[top--];
if(temp=='(') ch = INfix[i++];
}
}
}
Postfix[j] = '#';
}
int main(int argc, char * argv[])
{
char INfix[MAXsize] = "5+9*(6-4)-9/3#", Postfix[MAXsize];
for (int i = 0; INfix[i] != '#'; i++) std::cout << INfix[i];
std::cout<<std::endl;
infix_to_Postfix(INfix, Postfix);
for (int i = 0; Postfix[i] != '#'; i++) std::cout << Postfix[i];
std::cout << std::endl;
return 0;
}