/中缀转前缀:
进栈元素:) + * - /
进栈规则:
从后往前扫中缀表达式
若栈顶元素比目前元素的优先级大或者相等,出栈
若栈顶元素与当前元素优先级小,入栈;
若当前元素为’)‘入栈
若当前元素为’(’,出栈顶元素直到遇到’)‘位置,并且’('不表达
遇到操作数直接入栈/
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#define N 10
void fun(char A[])
{
char stack[N];
int stop=-1;
char result[N];
int rtop=-1;
int i=0;
while(A[i]!='\0')
{
i++;
}
i--;
while(i>=0)
{
if(A[i]=='*' || A[i]=='/')
{
if(stop==-1)
{
stack[++stop]=A[i];
}
else
{
while(stack[stop]=='*' ||stack[stop]=='/')
{
result[++rtop]=stack[stop--];
}
stack[++stop]=A[i];
}
}
else if(A[i]=='+' || A[i]=='-')
{
if(stop==-1)
{
stack[++stop]=A[i];
}
else
{
while(stack[stop]=='*' ||stack[stop]=='/' ||stack[stop]=='+' ||stack[stop]=='-')
{
result[++rtop]=stack[stop--];
}
stack[++stop]=A[i];
}
}
else if(A[i]=='(')
{
while(stack[stop]!=')')
{
result[++rtop]=stack[stop--];
}
--stop;
}
else if(A[i]==')')
{
stack[++stop]=A[i];
}
else
{
result[++rtop]=A[i];
}
i--;
}
while(stop!=-1)
{
result[++rtop]=stack[stop--];
}
while(rtop!=-1)
printf("%c",result[rtop--]);
}
int main()
{
char A[]="(a+b*e)*(c/d)";
fun(A);
return 0;
}