include[HTML_REMOVED]
include[HTML_REMOVED]
include[HTML_REMOVED]
string.h
struct Node
{
char Data[20];//题干最多20个字符
int Top;
};
typedef struct Node Stack;
Stack CreateStack()
{
Stack S=(Stack)malloc(sizeof(struct Node));
S->Top=-1;
return S;
}
void Push(Stack S,char ch)
{
S->Data[++(S->Top)]=ch;
}
char Pop(Stack S)
{
return S->Data[(S->Top)–];
}
int main()
{
//读取一行字符模板
char s[21];
scanf(“%s”,s);
Stack S=CreateStack();
//使用ASCII码存储优先级
char ch1[50];
ch1[‘+’]=1;
ch1[‘-‘]=1;
ch1[‘’]=2;
ch1[‘/’]=2;
int l=strlen(s);
int flag=0;
for(int i=0;i[HTML_REMOVED]ch1[S->Data[S->Top]]||S->Top==-1)
{
Push(S,s[i]);
flag=1;
}
else
{
while(ch1[s[i]]<=ch1[S->Data[S->Top]]&&S->Top!=-1)printf(” %c”,Pop(S));
Push(S,s[i]);
flag=1;
}
}
else
{
//flag用于控制格式,如果栈里有元素或者读取处理过’)’,会执行以下操作
if(flag)
{
printf(” “);
flag=0;
}
printf(“%c”,s[i]);
}
}
while(S->Top!=-1)printf(” %c”,Pop(S));
}