链式栈实现表达式求值代码
时间: 2024-11-09 22:18:06 浏览: 17
链式栈是一种利用栈数据结构来实现算法的技术,特别是在处理递归结构或逆序操作中非常有用,例如计算表达式。对于表达式求值,我们可以使用逆波兰表示法(Reverse Polish Notation, RPN)来简化处理过程。RPN不依赖于运算符优先级规则,直接将操作数后跟操作符入栈。
以下是使用链式栈实现后缀表达式求值的一个简单示例,假设我们有一个基本的二元操作栈:
```python
class Node:
def __init__(self, value):
self.value = value
self.next = None
class Stack:
def __init__(self):
self.top = None
def push(self, node):
if not self.top:
self.top = node
else:
new_top = Node(node.value)
new_top.next = self.top
self.top = new_top
def pop(self):
if self.top is None:
return None
else:
result = self.top.value
self.top = self.top.next
return result
def evaluate_postfix(expression):
stack = Stack()
for token in expression.split():
if token.isdigit():
stack.push(int(token))
else:
b = stack.pop() # 右操作数
a = stack.pop() # 左操作数
if token == '+':
stack.push(a + b)
elif token == '-':
stack.push(a - b)
elif token == '*':
stack.push(a * b)
elif token == '/':
stack.push(a / b)
return stack.pop()
# 示例
expression = "2 3 + 4 *"
result = evaluate_postfix(expression)
print("结果:", result) # 输出:14
```
在这个例子中,`evaluate_postfix`函数接收一个后缀表达式字符串,逐个处理数字和操作符,最后栈顶的元素就是计算的结果。注意这只是一个基础版本,实际应用中可能还需要处理更复杂的表达式和异常情况。
阅读全文