本文主要讲前缀,中缀,后缀以及其实现
python数据结构栈01(简单栈的实现)
如果不想看文字,只是想学会怎么转换,建议之间点上边有手就行,迅速学会,不会来找我。
一、
1、中缀
为啥要从中缀开题呢,主要是我们的现实生活中,中缀是比较常见的,比如A+B--------"+"是位于A和B之间的,还比如A+B*C,这可能在我们人眼中一眼就可以看出来,是先乘后加,可是当我们并没有学过到底谁先进行那怎么办呢。
在计算机中就是如此滴。
所以我们会引进括号(),或者给定操作符(’+’,’-’, ’ * '等)进行设定优先级。通过优先级来判定谁先执行,谁后执行。
2、前缀
同样A+B如果我们把+号提前,变成+AB这样计算机不是能更容易的识别计算。
我们再把式子扩充一下,A+B*C,这个式子的前缀就变成+A * BC,
在整一个A * B+C * D的前缀就是:+ * AB * CD
3、后缀
同样我们把操作符移动到最后就变成了后缀表达式
也就有了
A * B+C * D 后缀表达式: AB * CD * +
A+B * C+D 后缀表达式:ABC * +D+
有手就行
我直接上图
前缀:
A+B*C+D直接用全括号把它表示一下
就变成左边三个,右边三个
前缀变换:直接把操作符去替换左边让自己先进行运算的小括号
后缀变换与前缀相反,去替换右边的括号
如下图:
就这,这不是有手就行
实现
中缀转后缀
def s_postfix(s):
pre = {}
pre['*'] = 3
pre['/'] = 3
pre['+'] = 2
pre['-'] = 2
pre['('] = 1
stack = list() #定义栈
postfixlist = list() #定义一个暂时存放list
tokenList = list(s)
print(tokenList)
for token in tokenList:
if token in 'ABCDEFGHIGKLMNOPQRSTUVWXYZ' or token in '0123456789':
postfixlist.append(token)
elif token == '(':
stack.append(token)
elif token == ')':
top_stack = stack.pop()
while top_stack != '(':
postfixlist.append(top_stack)
top_stack = stack.pop()
else:
while len(stack) != 0 and pre[stack[-1]] >= pre[token]:
postfixlist.append(stack.pop())
stack.append(token)
while len(stack) != 0:
postfixlist.append(stack.pop())
return ''.join(postfixlist)
一般常用后缀,所以就把后缀放这
再见。
回去,冲冲冲,干饭!!!