#include<stdio.h>
//栈的应用:表达式求值
typedef char ElemType;
typedef int Status;
typedef struct{
ElemType *top;
ElemType *base;
int stacksize;
}SqStack;
#define MAXSIZE 10
#define ERROR 0
#define OK 1
//构造一个空栈
Status InitStack(SqStack &s)
{
s.base=new ElemType[MAXSIZE];
if(s.base==NULL)
{
printf("内存不足!");
return ERROR;
}
s.top=s.base;
s.stacksize=MAXSIZE;
return OK;
}
//元素入栈
Status push(SqStack &s,ElemType e)
{
if(s.top-s.base==MAXSIZE)
{
return ERROR;
}
*s.top=e;
s.top++;
return OK;
}
//元素出栈
Status pop(SqStack &s,ElemType &e)
{
if(s.top==s.base)
{
return ERROR;
}
s.top--;
e=*s.top;
return OK;
}
//取栈顶元素
Status GetTop(SqStack s,ElemType &e)
{
if(s.top==s.base)
{
return ERROR;//0
}
e=*(s.top-1);
return OK;//1
}
int main()
{SqStack s;
char prefix[MAXSIZE],e,postfix[MAXSIZE];
int j,i,f=0;
gets(prefix);
i=0;
j=0;
InitStack(s);
while(prefix[i]!='\0')
{if(prefix[i]>='0'&&prefix[i]<='9')
{ postfix[j]=prefix[i];
j++;
}
else if(prefix[i]=='(')
push(s,prefix[i]);
else if(prefix[i]==')')
{
f=GetTop(s,e);
while(e!='('&&f==1)
{
pop(s,e);
postfix[j]=e;
j++;
f=GetTop(s,e);
}
pop(s,e);
}
else if(prefix[i]=='+'||prefix[i]=='-')
{
f=GetTop(s,e);
while((e=='+'||e=='-'||e=='*'||e=='/')&&f==1)
{
pop(s,e);
postfix[j]=e;
j++;
f=GetTop(s,e);
}
push(s,prefix[i]);
}
else if(prefix[i]=='*'||prefix[i]=='/')
{
f=GetTop(s,e);
while((e=='*'||e=='/')&&f==1)
{
pop(s,e);
postfix[j]=e;
j++;
f=GetTop(s,e);
}
push(s,prefix[i]);
}
i++;
}
while(s.base!=s.top)
{
pop(s,e);
postfix[j]=e;
j++;
}
postfix[j]='\0';
puts(postfix);
return 0;
}