实现计算器4则运算算法-中缀表达式转后缀表达式

来源:互联网 发布:李洪成大宗易排盘软件 编辑:程序博客网 时间:2024/06/04 22:47

1.中缀表达式转后缀表达式 

  1)四则运算表达式中的括号必须匹配(判断表达式输入的有效性)

  2)根据运算符优先级进行转换

  3)转换后的表达式中没有括号

  4)转换后可以顺序计算出最终结果


2.转换过程:

 - 当前元素e为数字:输出

 - 当前元素e为运算符:

 1).与栈顶运算符进行优先级比较

   -.小于等于:将栈顶元素输出,转1

  -.大于:将当前元素e入栈

- 当前元素e为左括号:入栈

-当前元素e为右括号:

 1.弹出栈顶元素并输出,直至栈顶元素为左括号

2.将栈顶的左括号从栈中弹出



伪代码:

while (!exp.isEmpty())

{

QString e = exp.dequeue();

       if (isNumber(e))

      {

            输出 e;

      }

     else if (isOperator(e))

    {

     while( priority(e) <= priority(stack.top()))

                  输出栈顶元素, stack.pop();

                stack.push(e);

    }

    else if (isLeft(e))

 {

    stack.push(e); 

 }

  else if (isRight(e))

{

while( !isLeft(stack.top()))

       {

            输出栈顶元素, stack.pop();

       

       }

从栈中弹出左括号, stack.pop();

}

}


关键点: 转换过程中左右括号是重要标志

-如何确保表达式中的括号能够左右匹配?


-合法的四则运算表达式中

  - 括号匹配成对出现

  - 左括号必然先于右括号出现



伪代码:

   for (int i = 0 ; i < len; i++)

 {

if (  exp[i] 为左括号)

        {

exp[i]  入栈;

        }

       else  if (exp[i] 为右括号)

      {

            if (栈顶元素为左括号)

            {

将栈顶元素弹出;

             }

    else

            {

匹配错误;

              }

      }

}