栈的应用(python):前缀表达式 <- 中缀表达式 -> 后缀表达式
1. 栈的实现
可使用列表,按自己的方式实现栈的数据结构。类的方法可以实现栈的基本操作。
既然是用列表实现的,可以创造一些方便的方法比如__repr__以方便查看栈的内容。
class Stack():
def __init__(self): # 使用空列表初始化栈
self.items = []
def isEmpty(self): # 查看栈是否为空
return self.items == []
def push(self, item): # 入栈基操
self.items.append(item)
def pop(self): # 出栈基操
return self.items.pop()
def peek(self): # 查看栈顶元素
return self.items[len(self.items) - 1]
def __len__(self): # 使用列表特性,返回栈的长度
return len(self.items)
def __getitem__(self, n): # 使用列表特性,获取栈元素
return self.items[n]
def __repr__(self): # 使用列表特性,打印栈内容
if self.items:
return str(self.items)
else:
return 'None'
2. 前缀表达式 <- 中缀表达式 -> 后缀表达式
- 中缀表达式: 人类通常使用的表达式,易于人的理解
- 前缀表达式: 计算机通常使用的表达式,易于机器理解与执行
- 后缀表达式: 同上。
要理解这三种表达式,可以通过以下实例理解:
中缀表达式 | 前缀表达式 | 后缀表达式 |
---|---|---|
A + B | + A B | A B + |
A + B - C | - + A B C | A B + C - |
A + B * C | + A * B C | A B C * + |
(A + B) * C | * + A B C | A B + C * |
A + B * C - D | - + A * B C D | A B C * + D - |
(A + B) * (C - D) | * + A B - C D | A B + C D - * |
A * B + C / D | + * A B / C D | A B * C D / + |
A + B - C + D | + - + A B C D | A B + C - D + |