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

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

            {

匹配错误;

              }

      }

}


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值