栈与后缀表达式
前言
最近在复习数据结构的相关的知识的时候,学习到了后缀表达式的相关知识。( ̄▽ ̄)~*
所以,想着在python中练练手,便写下来了我今天所想要分享的代码。ヾ(゚∀゚ゞ)
让我们话不多说,开始我们的讲解吧(o゚▽゚)o
第一次观看我博客的小朋友,请移步到我的文章我的helper模块进行观看
一、知识点讲解
1.栈
说到后缀表达式,那就不能跳过“栈”这个知识点。(`・ω・´)
1.定义和特点
栈,又名堆栈,它是一种运算受限的线性表。其限制是仅允许在表的一端进行插入和删除运算。
以上内容来自百度知道
它最大的特点便是FILO(先进后出)
这个特点非常的适用于后缀表达式或前缀表达式的计算实现。
2.操作
- 初始化:initialize
- 进栈:push
- 出栈:pop
- 长度:stack_length
- 读取:get_top_element(一般栈的读取操作都是读取最顶端的元素)
3.具体代码
class Stack:
def __init__(self, max_size):
self.__stack_list = []
self.__max_size = max_size
self.__stack_length = 0
def initialize(self):
self.__stack_list.clear()
self.__stack_length = 0
def push(self, element):
if self.__max_size == self.__stack_length:
return False
else:
self.__stack_length += 1
self.__stack_list.append(element)
def pop(self):
if self.__stack_length == 0:
return False
else:
self.__stack_length -= 1
return self.__stack_list.pop()
def stack_length(self):
return self.__stack_length
def get_top_element(self):
if self.__stack_length == 0:
return False
return self.__stack_list[self.__stack_length - 1]
def stack_self(self):
return self.__stack_list
以上的代码我放进了我的helper模块,防止很多人是跳着看的,遂我再放上一次链接:我的helper模块
2.后缀表达式
1.定义
一个表达式E的后缀形式可以如下定义:
(1)如果E是一个变量或常量,则E的后缀式是E本身。
(2)如果E是E1 op E2形式的表达式,这里op是任何二元操作符,则E的后缀式为E1’E2’ op,这里E1’和E2’分别为E1和E2的后缀式。
(3)如果E是(E1)形式的表达式,则E1的后缀式就是E的后缀式。
以上内容来自百度百科
2.计算方法
新建一个表达式,如果当前字符为变量或者为数字,则压栈,如果是运算符,则将栈顶两个元素弹出作相应运算,结果再入栈,最后当表达式扫描完后,栈里的就是结果。
以上内容来自百度百科
二、应用
1.具体代码
def operator_level(operator):
if operator == '+' or operator == '-':
return 1
elif operator == '*' or operator == '/':
return 2
def regular_to_infix_converter(regular_string):
ifx_list = []
number_string = ''
is_number_flag = True
for element in regular_string:
if element == ' ':
continue
# print("--