调度场算法&&中缀表达式=>后缀表达式

#include<stdio.h>
#include<string.h>
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;
}

 

 

逆波兰

posted @ 2021-02-19 16:04  HickeyZhang  阅读(118)  评论(0)    收藏  举报