调度场算法&&中缀表达式=>后缀表达式
阅读原文时间:2023年07月15日阅读:2

#include
#include
int main(void){
char ch,stro[1001],stack[1001];
int numstack[1001];
int top=-1,head=-1;
/*************************************************/
/*将中缀表达式转化为后缀表达式*/
while((ch=getchar())!=EOF){
if(ch==' ') continue;
else if(ch<='9'&&ch>='0')
stro[++head]=ch;
else if(ch=='+'||ch=='-'){
if(top==-1)
stack[++top]=ch;
else{
while(true){
if(stack[top]=='+'||stack[top]=='-'){
stro[++head]=stack[top];
top--;
}else{
stack[++top]=ch;
break;
}
}
}
}else if(ch=='('){
stack[++top]=ch;
}else if(ch==')'){
while(true){
if(stack[top]!='('){
stro[++head]=stack[top];
top--;
}else{
top--;
break;
}
}
}
}

while(top>=0){  
    stro\[++head\]=stack\[top\];  
    top--;  
 }

stro\[++head\]='\\0';  
/\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*/  
/\*转化结束\*/

/\*开始计算\*/  
top=-1;  
for(int i=0;stro\[i\]!='\\0';i++){  
    if(stro\[i\]<='9'&&stro\[i\]>='0')  
        numstack\[++top\]=stro\[i\]-'0';  
    else if(stro\[i\]=='+'){  
        numstack\[top-1\]+=numstack\[top\];  
        top--;  
    }else if(stro\[i\]=='-'){  
        numstack\[top-1\]-=numstack\[top\];  
        top--;  
    }  
}  
printf("%d",numstack\[0\]);  
return 0;  

}

逆波兰