当前位置: 首页 > article >正文

中序表达式转后序表达式

什么是中序表达式

中序表达式就是我们日常使用的算术表达式,也称为中缀表达式。它的主要特点是操作符位于两个操作数之间,并且通常需要括号来改变运算的优先级

例如

3 + 4 × ( 5 + 6) - 8 / 2

什么是后序表达式

后序表达式,也被称为后缀表达式或逆波兰表示法(Reverse Polish notation,RPN),是一种算术表达式的书写方式,其中操作符位于其操作数之后。

例如

将 中序表达式 (1+4)×3+10/5 转后序表达式 1 4 + 3 * 10 5 / +

算法实现

class Stack:
    def __init__(self):
        self.items = []

    def isEmpty(self):
        return len(self.items) == 0
        
    def push(self,item):
        self.items.append(item)
    
    def pop(self):
        return self.items.pop()
    def peek(self):
        return self.items[len(self.items) - 1]
    
    def size(self):
        return len(self.items)

先定义好一个栈后续需要用到这个数据结构

import string
def infixToPostfix(infixexpr):
    prec = {}
    prec['*'] = 3
    prec["/"] = 3
    prec["+"] = 2
    prec["-"] = 2
    prec["("] = 1
    
    opStack = Stack()
    postfixList = []

    tokenList = infixexpr.split() # 切分空格

    for token in tokenList:
        if token in string.ascii_uppercase:
            postfixList.append(token)
        elif token == '(':
            opStack.push(token)
        elif token == ')':
            topToken = opStack.pop()
            while topToken != '(':
                postfixList.append(topToken)
                topToken = opStack.pop()
        else:
            while (not opStack.isEmpty()) and (prec[opStack.peek()] >= prec[token]):
                postfixList.append(opStack.pop())
            opStack.push(token)

    while not opStack.isEmpty():
        postfixList.append(opStack.pop())

    return " ".join(postfixList)

结果输出

infixToPostfix("( A + B ) * ( C + D )")

'A B + C D + *'


http://www.kler.cn/a/407826.html

相关文章:

  • HashMap源码详解
  • app小程序web安全—sign签名绕过
  • jvm发展历程介绍
  • Linux系统性能优化技巧
  • Python 中的三重引号
  • 太通透了,Android 流程分析 蓝牙enable流程(应用层/Framework/Service层)
  • 网络安全设备
  • 采用python3.12 +django5.1 结合 RabbitMQ 和发送邮件功能,实现一个简单的告警系统 前后端分离 vue-element
  • Java-05 深入浅出 MyBatis - 配置深入 动态 SQL 参数、循环、片段
  • 分布式 Data Warebase - 构筑 AI 时代数据基石
  • go-zero(八) 中间件的使用
  • 【人工智能】深入理解 Keras:从0开始完整教程!掌握深度学习的核心技术
  • 数据结构 (4)线性表的顺序存储
  • EMD-KPCA-Transformer多变量回归预测!分解+降维+预测!多重创新!直接写核心!
  • 手写一个深拷贝工具
  • 【Java知识】Java进阶-web应用热部署
  • 部署端侧大模型
  • 设计模式学习[9]---模板方法模式
  • 深度学习:GPT-1的MindSpore实践
  • git如何将当前的修改提交到其它分支
  • 性能测试调优之线程池的性能优化
  • Spark SQL操作
  • 文件分片上传
  • ubuntu, 安装部署comfyui,记录2:下载模型GGuf及测试
  • 解锁 ChatGPT 超强交互:超级提示词的魔力
  • C#中的二维数组的应用:探索物理含义与数据结构的奇妙融合