【数据结构】栈的应用-将中缀表达式转化为后缀表达式

【数据结构】栈的应用-将中缀表达式转化为后缀表达式后缀表达式即逆波兰式 是卢卡西维奇 Lukasiewicz 于 1929 年发明的一种表示表达式的方法

大家好,欢迎来到IT知识分享网。

1、后缀表达式简介

后缀表达式即逆波兰式,是波兰逻辑学家卢卡西维奇(Lukasiewicz)于1929年发明的一种表示表达式的方法。区别于我们常用的中缀表达式(如2+3*5),后缀表达式是将每个运算符放到操作数之后,没有优先级和括号,例如2 3 5 * + 。

2、中缀表达式转后缀达式的方法

定义一个栈S,存储运算符和操作数。

1、如果检测到操作数,直接加入后缀表达式。

2、如果检测到运算符:

a、如果栈S为空或者运算符为”(“或者栈顶运算符为”(“,直接加入栈中;

b、如果是”(“,则依次将栈中运算符弹出加入到后缀表达式中,直到遇到”(“停止,并删除”(“。

c、如果是”+”、”-“、”*”、”/”运算符:

  • 如果栈S为空或者顶运算符为”(“,直接加入栈中;
  • 如果当前运算符优先级高于栈顶运算符,则直接入栈;
  • 否则,依次弹出栈顶运算符加入后缀表达式,直到栈顶运算符低于当前运算符或者栈为空或者遇到一个”(“,然后将它入栈。

3、遍历完整个中缀表达式后,如果栈非空,则依次弹出加入后缀表达式。

注:后缀表达式不包含括号。

3、举例

有中缀表达式 A+B*(C-D)/E+F/H。

  1. 遇到操作数A加入后缀表达式。此时后缀表达式内容(A)。栈为空。​​【数据结构】栈的应用-将中缀表达式转化为后缀表达式
  2. 遇到”+”,栈顶为空,直接入栈。此时后缀表达式为(A)。                                              【数据结构】栈的应用-将中缀表达式转化为后缀表达式
  3. 遇到B,直接加入后缀表达式。此时后缀表达式为(A B)。                                       【数据结构】栈的应用-将中缀表达式转化为后缀表达式
  4. 遇到”*”,优先级高于栈顶元素”-“,直接入栈。此时后缀表达式为(A B)。                 【数据结构】栈的应用-将中缀表达式转化为后缀表达式
  5. 遇到”(“,直接入栈。此时后缀表达式为(A B)。                                                        【数据结构】栈的应用-将中缀表达式转化为后缀表达式
  6. 遇到C,加入后缀表达式。此时后缀表达式为(A B C)。                       ​​​​​​​                        【数据结构】栈的应用-将中缀表达式转化为后缀表达式
  7. 遇到”-“,因为栈顶为”(“,所以直接入栈。此时后缀表达式为(A B C)。        ​​​​​​​                 【数据结构】栈的应用-将中缀表达式转化为后缀表达式
  8. 遇到D,加入后缀表达式。此时后缀表达式为(A B C D)。                      ​​​​​​​                       【数据结构】栈的应用-将中缀表达式转化为后缀表达式
  9. 遇到”)”,依次弹出栈顶元素,直到遇到”(“,并删除”(“。此时后缀表达式为(A B C D -)。    【数据结构】栈的应用-将中缀表达式转化为后缀表达式
  10. 遇到”/”,优先级并不大于栈顶运算符”*”,故弹出”*”,遇到”-“,优先级小于它,则终止,将”/”入栈。此时后缀表达式为(A B C D – * )。                                                                  
    【数据结构】栈的应用-将中缀表达式转化为后缀表达式                                                          ​​​​​​​                    ​​​​​​​                          ​​​​​​​      ​​​​​​​         
  11. 此后类似,不再列举,直到遍历完整个中缀表达式。此时后缀表达式为(A B C D – * E / + F H ),而非空。                                                                                                       ​​​​​​​  ​​​​​​​        【数据结构】栈的应用-将中缀表达式转化为后缀表达式
  12. 依次弹出栈中元素加入后缀表达式,得到最终的后缀表达为(A B C D – * E / + F H / +)。

完结撒花~~~如果对您有帮助,还请多多支持哦,谢谢!

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/136004.html

(0)
上一篇 2025-06-30 17:45
下一篇 2025-06-30 18:10

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信