![](http://tiebapic.baidu.com/forum/w%3D580/sign=c9f57d50de3d70cf4cfaaa05c8ddd1ba/ba3c034f78f0f736190863681d55b319eac413b8.jpg?tbpicau=2025-02-28-05_0185b82dae33386e11f45f573cfb0627)
这是题目;以下为我的代码:
#include<stdio.h>
#include<string.h>
int opprioty(char op);//判断符号优先级的代码
int main(void){
char s1[100]; //用于存放后缀表达式的栈
int top1=-1;
char s2[100]; //符号栈
int top2=-1;
char exp[100]; //输入的表达式
scanf("%s",exp);
getchar();
int i=0;
while(exp[i]!='\0'){
if(exp[i]>='0'&&exp[i]<='9'){ //数字直接进入S1
s1[++top1]=exp[i];
i++;
}else if(exp[i]=='('){ //左括号优先级最高 直接入S2
s2[++top2]=exp[i];
i++;
}else if(exp[i]=='+'||exp[i]=='-'||exp[i]=='*'||exp[i]=='/'){
if( opprioty(exp[i])>opprioty(s2[top2]) ||s2[top2]=='(' ||top2==-1 ){ //扫描到运算符,若扫描到的运算符大于S2栈 顶的优先级或S2为空或s2栈顶为左括号S2栈
s2[++top2]=exp[i];
i++;
}else{
s1[++top1]=s2[top2--]; //否则现将S2栈顶元素入栈S1
}
}else if(exp[i]==')'){ //扫描到的运算符为右括号,则将S2栈中的运算符依次入栈,直到遇到左括号
while(s2[top2]!='('){
s1[++top1]=s2[top2--];
}
i++;
top2--;
}
}
while(top2!=-1)s1[++top1]=s2[top2--]; //当扫描输入表达式完成后若S2栈不空,则将S2栈符号全部入S1栈
for(i=0;i<=top1;i++){ //输出S1栈中元素,每个元素间隔一个空格 切末尾无空格
printf("%c",s1[i]);
if(i<top1)printf(" ");
} return 0;
}
int opprioty(char op){
if(op=='+'||op=='-')return 0;
else return 1;
}
![](http://tiebapic.baidu.com/forum/w%3D580/sign=00fdd8a4eb039245a1b5e107b795a4a8/9bdab9014a90f603b0beb22e2e12b31bb051ed21.jpg?tbpicau=2025-02-28-05_27c8ecb1c72b1bf7d4bbc2dd0497b1dd)
![](http://tiebapic.baidu.com/forum/w%3D580/sign=ede54c7506dfa9ecfd2e561f52d1f754/f808352ac65c10384c75e0aba5119313b07e8923.jpg?tbpicau=2025-02-28-05_d29cb953c14737511352ad9e2ab9238d)