2201_75532175 2023-10-09 10:41 采纳率: 81.8%
浏览 14
已结题

关于#数据结构#的问题:A + B * (C - D) – E / F转前缀为-+A*B-CD/EF原则是什么

A + B * (C - D) – E / F转前缀为-+A*B-CD/EF原则是什么,为什么少了一个减号

  • 写回答

2条回答 默认 最新

  • 老僧& 2023-10-09 10:47
    关注

    将中缀表达式转换为前缀表达式的过程涉及到运算符优先级和结合性的考虑。前缀表达式也被称为波兰式(Polish Notation),它的特点是运算符位于操作数之前。

    转换时的原则是:
    从右到左遍历中缀表达式的每个字符(操作数或运算符)。
    如果遇到操作数,则将其直接输出到前缀表达式中。
    如果遇到运算符,需要考虑其优先级:
    如果栈为空,或者栈顶的运算符为左括号 "(", 则将当前运算符入栈。
    如果当前运算符的优先级高于栈顶运算符的优先级,也将当前运算符入栈。
    如果当前运算符的优先级低于或等于栈顶运算符的优先级,将栈顶运算符弹出并输出到前缀表达式,然后继续比较当前运算符与新的栈顶运算符的优先级,直到当前运算符可以入栈。
    如果遇到左括号 "(",则将其入栈。
    如果遇到右括号 ")",则将栈中的运算符依次弹出并输出到前缀表达式,直到遇到对应的左括号 "(",将左括号出栈但不输出。
    最后,如果中缀表达式遍历完成,但栈中仍然有运算符,就依次弹出并输出到前缀表达式。
    现在来看您提供的中缀表达式和转换结果:
    中缀表达式:A + B * (C - D)E / F
    前缀表达式:-+A*B-CD/EF
    ```bash
    
    
    
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 10月18日
  • 已采纳回答 10月10日
  • 创建了问题 10月9日

悬赏问题

  • ¥15 python Flassk 模块部署 服务器时报错
  • ¥15 Opencv(C++)异常
  • ¥15 VScode上配置C语言环境
  • ¥15 汇编语言没有主程序吗?
  • ¥15 这个函数为什么会爆内存
  • ¥15 无法装系统,grub成了顽固拦路虎
  • ¥15 springboot aop 应用启动异常
  • ¥15 matlab有关债券凸性久期的代码
  • ¥15 lvgl v8.2定时器提前到来
  • ¥15 qtcp 发送数据时偶尔会遇到发送数据失败?用的MSVC编译器(标签-qt|关键词-tcp)