python的中缀表达式转后缀表达式

#python数据结构与算法分析(第二版)#

#对每一个步骤进行深入解析

一.

首先来到Stack的功能图

def  __init__(self):
        self.items = [] -----初始化,先创建一个空的列表以完成接下来的stack的一系列操作

在这个stack,我们取列表的表尾为栈顶,因为后续进行压栈,出栈都可以实现O(1)的时间复杂度方便很多。

因为直接引入一个Stack的库需要去官网下载,我这里就没有下载,直接自己定义了一个栈的类,它们的操作都是相同的,不用担心。

二.创建判断优先级的键值对

import string ----引入这个库,是后序要用到ASCII码来判断token(字符)是否属于词还是符号。

这里我们创建了一个空字典--prec

后面把各操作符(这里为key-键)放入,并设定相应的值(value)。这是为后续的在栈中的操作符是否要出栈还是继续压栈进行判断。后续为详细解释。

为何将“(”---优先级为何最小?

因为遇到“(”时便可以直接把“(”压入栈。而不是执行遇到操作符的时候“(”被出栈而操作符进栈的操作

三.for遍历tokenlist,对字符(token)进行判断

对于第三行,是将传入的中序表达式以.split()-----以空格为分隔点,拆分成字符串集列表

postfixlist用来储存随后传入的操作数和操作符

opstack是一个栈,用来暂存操作符,使用其倒序性

随后遍历tokenlist:

  1. 遍历 tokenlist。对于每一个 token

    • 如果 token 是一个大写字母(即操作数),就将其添加到 postfixlist
    • 如果 token 是一个左括号,就将其压入 opstack
    • 如果 token 是一个右括号,就从 opstack 弹出元素并添加到 postfixlist,直到遇到一个左括号。
    • 如果 token 是一个运算符,就从 opstack 弹出元素并添加到 postfixlist,直到遇到一个优先级更低的运算符,然后将 token 压入 opstack

四:判断结束遍历后的opstack是否为空集,随后返回字符串类型的后缀表达式

若opstack不为空的时候,便执行while循环-----按从栈顶依次弹出栈中元素到postfixlist中

这个是按先进后出的方式弹出。

.join()-----连接在一起

这样便完成了中缀表达式转后缀表达式的转化

这个为整个源码,多操作几次,才能更好的理解

欢迎来到评论区进行讨论。

  • 14
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值