zoukankan      html  css  js  c++  java
  • python计算后续表达式

      列举一个后续表达式:4 5 6  *  +。当从左往右扫描该表达式时,首先会遇到操作数4和5.在遇

    下一个符号之前,我们不确定要对它们进行计算。将他们都保存在栈中,变可以在需要是取用。

      在本例中,紧接着出现的符号又是一个操作数。因此,将6也压入栈中,并继续检查后面的符

    号。现在遇到运算符*。这意味着需要将最近遇到的两个操作数相乘。通过执行两次出栈操作,可

    以得到相应的操作数,然后进行乘法运算,得到结果30。

      接着,将结果压入栈中。这样一来当遇到后面的运算符时,它可以作为操作数。当处理完最

    后一个运算符之后,栈中只剩一个值。将这个值取出来,并作为表达式的结果返回。

        

      在列举一个复杂的例子:7 8 + 3 2 + /。有两处需要注意。首先伴随着子表达式的计算,栈增

    大、缩小,然后再一次增大。其次,处理除去算法时需要非常小心。由于后续表达式只改变运算

    符的位置,因此操作数的位置与在中序表达式中的位置相同。当从栈中去除除号的操作数时,它

    们顺序颠倒了。由于除号不是可交换的运算符(15/5和5/15的结果不相同),因此必须保证操作

    数的顺序没有颠倒。

        

      假设后续 表达式是一个以空格分隔的标记串,其中,运算符标记有*、/、+、-,操作数标记

    的是一位的整数值。结果是一个整数。

      (1)创建空栈operandStack。

      (2)使用字符串方法split将输入的后续表达式转换成一个列表。

      (3)从左往右扫描这个标记列表。

        如果标记是操作数,将其转换成整数并且压入operandStack栈中。

        若果标记是运算符,从operandStack栈中取出晾干操作数。第一次取出右操作数,第二次

    取出左操作数。进行相应的算术运算,然后将运算结果压入operandStack栈中。

      (4)当处理完输入表达式时,栈中的值就是结果。将其压入栈中返回。

     1 from pythonds.basic import Stack
     2 def postfixEval(postfixExpr):
     3     operandStack = Stack()
     4 
     5     tokenList = postfixExpr.split()
     6 
     7     for token in tokenList:
     8         if token in "0123456789":
     9             operandStack.push(int(token))
    10         else:
    11             operand2 = operandStack.pop()
    12             operand1 = operandStack.pop()
    13             result = doMath(token,operand1,operand2)
    14             operandStack.push(result)
    15 
    16     return operandStack.pop()
    17 
    18 def doMath(op,op1,op2):
    19     if op == "*":
    20         return op1 * op2
    21     elif op == "/":
    22         return op1 / op2
    23     elif op == "+":
    24         return op1 + op2
    25     else:
    26         return op1 - op2
  • 相关阅读:
    优化linux,安装node环境
    腾讯云主机的公网无法访问,putty和FileZilla连接不上
    angularjs1.x的directive中的link参数element见解
    springboot自动装配原理
    redis哨兵部署
    HashMap笔记
    多线程与高并发
    java面试必会知识点
    maven仓库
    java任务调度简单示例
  • 原文地址:https://www.cnblogs.com/mtfan01/p/14487623.html
Copyright © 2011-2022 走看看