将中缀表达式转换成等价的前缀表达式

来源:百度知道 编辑:UC知道 时间:2024/05/04 07:50:33
利用栈来存储输入串。(顺序栈、链栈) 2. 从栈顶元素开始,逆序判断输入串的各个元素是运算符,还是操作数? 3. 可以创建运算符栈,并且在程序执行过程中,不断判断运算符的优先级。 4. 用栈来存储前缀表达式。(存放操作数和运算符)
如:
2*3/(2-1)+5*(4-1) 转化后为
+/*23-21*5-41

#include<stdio.h>
#define N 100
int f(char c) //判断运算符级别函数;
{
int f=-1;
switch(c)
{
case'+':
case'-':f=1;break;
case'*':
case'/':f=2;break;
default:f=0;break;
}
return f;
}
int Operator(char c) //判断字符是否为操作符
{
if(c=='+'||c=='-'||c=='*'||c=='/')
return 1;
else
return 0;
}
void convert(char s[N]) //将中缀表达式转化为前缀表达式
{
char p[N],stack[N];
int top=0,j=0, len=0;
if(s[0]==')')
{
printf("对不起,您输入不合法,将退出当前的程序!");
printf("\n\n");
}
else
{
while(s[len]!='\0')
{
len++;
}
for(int i=len-1;i>=0;)
{
if(s[i]>=48 && s[i]<=57)
{
p[j]=s[i];
j++;
}
if(s[i]==')') //假如是回括号,