数据结构与算法——中序转后序

本文探讨了如何将中序表达式转换为后序表达式,通过算法抽象理解,数学逻辑和计算机逻辑的解析,阐述了利用栈解决这一问题的方法。详细解释了在遇到不同运算符和括号时的处理策略,并提供了具体的代码逻辑,帮助理解转换过程。
摘要由CSDN通过智能技术生成

算法题:先抽象理解算法,算法逻辑转化为数学逻辑,数学逻辑转化为计算机逻辑,代码实现
栈算法案例:中序到后序
例:中序表达式1 (A+B)C-(D-E)(F+G)
► 算法抽象理解:转化为后序表达式1为AB+CDE-FG+-
► 数学逻辑:
○ 中序:优先级和括号两个原则,无括号情况下,乘除大于加减,有括号则为最高优先级
○ 前序:两个数之间的操作符符移到两个数之后,操作符的对象为两个数字,故中序表达式需要看优先级,而后序、前序不需要;
► 计算机逻辑:
○ 数字如何定位
§ 遍历,发现数字则添加进列表
○ 运算符如何定位?
§ 通过中序优先级决定
□ 遇到高等级运算符则加括号?将运算符移到右括号后面,如何生成括号?死循环,pass
□ 手动定义优先级,遇到括号为最高优先级,乘除为第二,加减为第三优先级
® 遇到括号为最高优先级怎么实现?左括号压栈,右括号出栈,则括号内的运算符为最高优先级,如何实现?
◊ 括号和运算符都入栈,遇到右括号则出栈直到左括号出栈匹配成功
□ 乘除运算符怎么实现弹出,触发条件为?
® 通过定义乘除优先级为3,加减为2,左括号为1(防止左括号被非遇到右括号的时候弹出)
® 触发条件为栈顶操作符的优先级值和新的操作符优先级值的比较,若大于或等于则弹出
► 代码逻辑:
○ 遍历中序字符串生成的列表
§ 为左括号,压栈
§ 为数字,append到列表
§ 为操作符,压栈,需判断列表里有没有优先级比它高的操作符,有出栈,无入栈
§ 为右括号,出栈添加到列表,直到出与之匹配的左括号

# encoding:utf-8
# 进击吧
# 2020/8/30 9:46

from pythonds3.basic import Stack
import string


def infix_to_postfix(infix)
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值