中缀表达式变前缀表达式
算法思想:当碰到数字时候直接输出,一开始 栈不能为空必须放一个优先级为0的#。
下面是各个操作符的优先级
```cpp
在这里插入代码片
```#include<iostream>
#include<string.h>
#include<stack>
using namespace std;
int isp(char p)
{
int k=0;
switch(p)
{
case '#':k=0;break;
case '(': k=1;break;
case '*': k=5;break;
case '/': k=5;break;
case '+':k=3;break;
case '-': k=3;break;
case ')': k=6;break;
}
return k;
}
int icp(char p)
{
int k=0;
switch(p)
{
case '#': k=0;break;
case '(': k=6;break;
case '*': k=4;break;
case '/':k=4;break;
case '+': k=2;break;
case '-': k=2;break;
case ')':k=1;break;
}
return k;
}
int main ()
{
int i,k;
char num[100],l;
stack <int> A;
scanf("%s",&num);
A.push('#');
for(i=0;i<strlen(num);)
{
if(num[i]>='0'&&num[i]<='9')/*数字直接输出*/
{
printf("%c",num[i]);
i++;
}
else
{
if(icp(num[i])>isp(A.top()))/*栈顶优先级小于当前元素压人*/
{
A.push(num[i]);
i++;
}
else
{
if(icp(num[i])<isp(A.top()))/*栈顶优先级大于当前元素,弹出然后输出*/
{
printf("%c",A.top());
A.pop();
}
else
{ /*相等,弹出*/
A.pop();
i++;
}
}
}
}
printf("%c",A.top());
}