#include"stdio.h"
#include<iostream>
using namespace std;
typedef struct
{
char *elem;
int top;
int maxsize;
}SqStack;
int init(SqStack &s,int n)
{
s.maxsize=n;
s.top=-1;
s.elem=new char[n];
if(s.elem==NULL) return 0;
return 1;
}
int push(SqStack &s,char x)
{
if(s.top==s.maxsize-1) return 0;
s.top++;
s.elem[s.top]=x;
return 1;
}
char pop(SqStack &s,char &x)
{
if(s.top==-1) return 0;
x=s.elem[s.top];
s.top--;
return x;
}
char GetTop(SqStack s)
{
char a;
a=s.elem[s.top];
return a;
}
int isp(char a) //OPTR 中算符优先级
{
int b;
switch(a)
{
case ')':b=4;break;
case '*':b=3;break;
case '/':b=3;break;
case '+':b=2;break;
case '-':b=2;break;
case '(':b=1;break;
case '#':b=0;break;
}
return b;
}
int icp(char a) //进栈前的优先级
{
int b;
switch(a)
{
case ')':b=1;break;
case '*':b=3;break;
case '/':b=3;break;
case '+':b=2;break;
case '-':b=2;break;
case '(':b=4;break;
case '#':b=0;break;
}
return b;
}
void change(char *a)
{
SqStack OPTR;
init(OPTR,100);
push(OPTR,'#');
int i,j;
while(*a!='#'||GetTop(OPTR)!='#')
{
if(*a>='a'&&*a<='z')
{
cout<<*a<<endl;
a++;
}
else
{
i=isp(GetTop(OPTR));
j=icp(*a);
if(i<j)
{push(OPTR,*a);a++;}
else
{