跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客GitHub 精选镜像AI 生图工具UI配色美学隐私政策关于联系
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
Python算法

基于栈的中缀表达式转后缀表达式

中缀表达式转后缀表达式利用栈结构实现。遍历输入字符串,操作数直接加入结果列表,运算符根据优先级与栈顶比较决定入栈或出栈。左括号强制入栈,右括号触发弹出直到左括号。最后清空栈内剩余元素。代码使用 Python 实现,包含栈类定义及转换函数逻辑,适用于算术表达式求值预处理场景。

imJackJia发布于 2025/2/8更新于 2026/7/1632 浏览
基于栈的中缀表达式转后缀表达式

表达式转换

例:A+BC 是中缀表达式,它的后缀表达式为:ABC+

思路

遇到字母或者数字,直接输出。遇到运算符,先 push 到一个栈里,等遇到下一个运算符,和前一个比较一下,前一个优先级高的,就 pop 出去,把后来的 push 进去。后一个优先级高的,把他 push 到栈里。最后,再把栈里元素全部输出。

栈定义函数

class Stack(object):
   def __init__(self):
      self.item = []
      
   def isEmpty(self):
      return self.item == []
      
   def push(self, data):
      self.item.append(data)
      
   def pop(self):
      return self.item.pop()
      
   def peek(self):
      return self.item[len(self.item) - 1] # 返回栈顶元素
      
   def search(self, x): 
      return self.item.index(x)
      
   def size(self):
      return len(self.item)

转换函数

def infix2Postfix(s):
   # 优先级定义
   prec = {}
   prec['/'] = 3
   prec['*'] = 3
   prec['+'] = 2
   prec['-'] = 2
   prec['('] = 1
   
   stack = Stack()
   result = []
   tokenList = s.split()
   for token in tokenList:
       if token in 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' or token in '1234567890':
           result.append(token)
       elif token == '(':
           stack.push(token)
       elif token == ')':
           topToken = stack.pop()
           while(topToken != '('):
               result.append(topToken)
               topToken = stack.pop()
       else:
            while(not stack.isEmpty() and (prec[stack.peek()] >= prec[token])):
                result.append(stack.pop())
            stack.push(token)
   while(not stack.isEmpty()):
       result.append(stack.pop())
   return ' '.join(result)

注意:输入格式应为 A + B * C(操作数之间需有空格)。

目录

  1. 表达式转换
  2. 思路
  3. 栈定义函数
  4. 转换函数
  5. 优先级定义
  • 免费图片AI生成工具免费生成了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 免费图片视频在线生成30秒,将你的创意变成现实开始设计
  • X/Twitter免费视频下载器免登陆无限额度免费视频解析下载了解详情
  • 100+免费在线小游戏爽一把
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • CTFshow Web25:php_mt_seed 伪随机数种子爆破实战
  • OpenClaw AI 智能体本地部署与实战指南
  • 高校大学生图书馆借阅分析统计系统的设计与实现
  • Nginx 与 Web 安全加固
  • Web Unlocker API 助力 AI 训练数据集获取方案
  • IDEA 创建 Spring Boot Web 项目教程
  • 主流 C++ 集成开发环境(IDE)推荐
  • SpringBoot 无人机智能管控系统设计与实现
  • 前端组件库实战:告别重复造轮子,提升开发效率
  • 算法实战:寻找数组中心下标与除自身外数组乘积
  • C/C++ 算法入门:一维动态规划基础实战
  • MCPHost 命令行工具实战:让大模型调用外部工具
  • LoRA与QLoRA:高效大语言模型微调技术解析
  • C++ 内存管理:new/delete 原理及与 malloc/free 对比
  • 彻底解决 Copilot 与 Codex 中文乱码问题(附自动化脚本)
  • Neo4j 图数据库在 macOS 上的安装与基础操作指南
  • MySQL 事务详解:ACID 特性、引擎支持与提交方式
  • Vue3+Python 基于协同过滤算法的图书馆图书借阅推荐系统设计与实现
  • 基于 WebGIS 实现 80 年代风格老式天气预报系统
  • 基于 1Panel 部署 OpenClaw 结合 Ollama 本地 AI 助理

相关免费在线工具

  • 加密/解密文本

    使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online

  • Gemini 图片去水印

    基于开源反向 Alpha 混合算法去除 Gemini/Nano Banana 图片水印,支持批量处理与下载。 在线工具,Gemini 图片去水印在线工具,online

  • curl 转代码

    解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online

  • Markdown转HTML

    将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online