python数据结构栈02(前中后缀的表达式转换)

本文主要讲前缀,中缀,后缀以及其实现

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)

一般常用后缀,所以就把后缀放这
在这里插入图片描述
再见。
回去,冲冲冲,干饭!!!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值