回 帖 发 新 帖 刷新版面

主题:用栈实现算法优先级问题———表达式求值

能给我个 用栈实现表达式求值么? 会的说下  
                                     谢了

回复列表 (共1个回复)

沙发


char Precede(char pre_op,char ch)
{
    int i,j;
    char a[7][7]={    '>','>','<','<','<','>','>',
                    '>','>','<','<','<','>','>',
                    '>','>','>','>','<','>','>',
                    '>','>','>','>','<','>','>',
                    '<','<','<','<','<','=','0',
                    '>','>','>','>','0','>','>',
                    '<','<','<','<','<','0','='};
    char b[7]={'+','-','*','/','(',')','='};
    for(i=0;i<7;i++)
    {
        if(pre_op == b[i])
            break;
    }
    for(j=0;j<7;j++)
    {
        if(ch==b[j])
            break;
    }
    return a[i][j];
}
double Expression_Eval()
{
    SeqStack<char,100> OPTR;
    SeqStack<double,100> OPND;
    OPTR.Push('=');
    char ch=getchar();
    char pre_op;
    double a,b;
    string num="";//定义字符串存放数据
    bool flag=false;
    while(ch!='='|| OPTR.Top()!='=')
    {
        if((ch>='0'&& ch<='9') || ch=='.')
        {flag=true;num+=ch;ch=getchar();}
        else
        {
            if(flag)
            {  
                OPND.Push(atof(num.c_str()));num="";
                flag=false;
            }
            
                pre_op=OPTR.Top();
                switch(Precede(pre_op,ch))
                {
                case'<':
                        OPTR.Push(ch);ch=getchar();break;
                case'=':
                        OPTR.Pop();ch=getchar();break;
                case'>':
                    {
                        b=OPND.Pop(); a=OPND.Pop(); pre_op=OPTR.Pop();
                        OPND.Push(Operate(a,pre_op,b));break;
                    }
                }
            }
        

    }
    return OPND.Top();
}栈自己构造

我来回复

您尚未登录,请登录后再回复。点此登录或注册