后缀表达式计算器,也称为栈计算器,是一种特殊的计算器,它要求在表达式中,操作符必须出现在其操作数之后。例如,一个普通的前缀表达式25 + 12,在后缀表达式中会写成25 12 +。后缀表达式的计算顺序是按照操作符出现的顺序,从左到右进行的。为了实现这个计算器,需要定义一个栈类,这个栈类将作为操作数和中间结果的容器。最终结果也会存储在栈中,并在过程结束时被提取出来显示。
后缀表达式计算器的工作原理是将操作数推入栈中,直到遇到一个操作符。当遇到操作符时,将最后两个推入栈的操作数弹出,执行所需的操作,并将操作的结果再次推入栈中。在表达式的末尾,从栈中弹出最后一个值,并将其显示为最终结果。
以下是栈的节点类代码,它是栈类的基础。它定义了一个构造函数以及所需的获取器和设置器方法。
class Node:
def __init__(self, d):
self.data = d
def setnext(self, n):
self.next = n
def getdata(self):
return self.data
def getnext(self):
return self.next
以下是栈类代码。它定义了一个构造函数以及push和pop操作,此外还有一个方法来检查栈是否为空。
class Stack:
def __init__(self):
self.top = None
def push(self, d):
self.newnode = Node(d)
self.newnode.setnext(self.top)
self.top = self.newnode
def pop(self):
temp = self.top
self.top = self.top.getnext()
n = temp.getdata()
del temp
return n
def isempty(self):
return self.top == None
import re
if __name__ == "__main__":
try:
mystack = Stack()
expr = input("Enter expression with space between numbers and operators: ")
expr = re.sub("\s+", " ", expr)
expr = expr.strip()
elements = re.split(r"\s+", expr)
for x in elements:
if x == "+":
n1 = int(mystack.pop())
n2 = int(mystack.pop())
n3 = n2 + n1
mystack.push(n3)
elif x == "-":
n1 = int(mystack.pop())
n2 = int(mystack.pop())
n3 = n2 - n1
mystack.push(n3)
elif x == "*":
n1 = int(mystack.pop())
n2 = int(mystack.pop())
n3 = n2 * n1
mystack.push(n3)
elif x == "//":
n1 = int(mystack.pop())
n2 = int(mystack.pop())
n3 = n2 // n1
mystack.push(n3)
elif x == "/":
n1 = int(mystack.pop())
n2 = int(mystack.pop())
n3 = n2 / n1
mystack.push(n3)
else:
mystack.push(x)
print("Result: " + str(mystack.pop()))
except AttributeError as e:
print("Invalid Expression: " + str(e))