何大土  

在上一篇随笔中已经知道如何将中缀表达式转换为后缀表达式,那么如何由后缀表达式计算出值呢?

//操作数栈
typedef struct {
    int data[MAXSIZE];
    int top;
} ST;

ST st;


//计算后缀表达式的值
int compvalue(char postexp[]) {
    st.top=-1;
    int d=0;
    int i=0,j=0;
    char ch = postexp[i];

    while(ch!='\0') {
        switch(ch) {
            case '+': {
                st.data[st.top-1]=st.data[st.top-1]+st.data[st.top];
                st.top--;
                break;
            }
            case '-': {
                st.data[st.top-1]=st.data[st.top-1]-st.data[st.top];
                st.top--;
                break;
            }
            case '*': {
                st.data[st.top-1]=st.data[st.top-1]*st.data[st.top];
                st.top--;
                break;
            }
            case '/': {
                st.data[st.top-1]=st.data[st.top-1]/st.data[st.top];
                st.top--;
                break;
            }
            case ' ':
                break;
            default: {
                d=0;
                while(ch>='0'&&ch<='9') {
                    d=d*10+ch-'0';
                    i++;
                    ch=postexp[i];
                }
                st.top++;
                st.data[st.top]=d;
                break;
            }
        }
        i++;
        ch=postexp[i];

    }
    return st.data[st.top];
}

 

posted on 2018-07-30 13:43  何大土  阅读(1993)  评论(0编辑  收藏  举报