`
pangyi
  • 浏览: 33658 次
  • 性别: Icon_minigender_1
  • 来自: 古城西安
社区版块
存档分类
最新评论

逆波兰表达式

阅读更多
逆波兰表达式
  逆波兰表达式 rpn(Reverse Polish Notation)
  逆波兰表达式,它的语法规定,表达式必须以逆波兰表达式的方式给出。逆波兰表达式又叫做后缀表达式。这个知识点在数据结构和编译原理这两门课程中都有介绍,下面是一些例子:
  正常的表达式 逆波兰表达式
  a+b ---> a,b,+
  a+(b-c) ---> a,b,c,-,+
  a+(b-c)*d ---> a,d,b,c,-,*,+
  a=1+3 ---> a=1,3 +
  http=(smtp+http+telnet)/1024 写成什么呢?
  http=smtp,http,telnet,+,+,1024,/
  逆波兰表达式是一种十分有用的表达式,它将复杂表达式转换为可以依靠简单的操作得到计算结果的表达式。例如(a+b)*(c+d)转换为ab+cd+*
  它的优势在于只用两种简单操作,入栈和出栈就可以搞定任何普通表达式的运算。其运算方式如下:
  如果当前字符为变量或者为数字,则压栈,如果是运算符,则将栈顶两个元素弹出作相应运算,结果再入栈,最后当表达式扫描完后,栈里的就是结果。
  将一个普通的中序表达式转换为逆波兰表达式的一般算法是:
  (1)首先构造一个运算符栈,此运算符在栈内遵循越往栈顶优先级越高的原则。
  (2)读入一个用中缀表示的简单算术表达式,为方便起见,设该简单算术表达式的右端多加上了优先级最低的特殊符号“#”。
  (3)从左至右扫描该算术表达式,从第一个字符开始判断,如果该字符是数字,则分析到该数字串的结束并将该数字串直接输出。
  (4)如果不是数字,该字符则是运算符,此时需比较优先关系。
  做法如下:将该字符与运算符栈顶的运算符的优先关系相比较。如果,该字符优先关系高于此运算符栈顶的运算符,则将该运算符入栈。倘若不是的话,则将栈顶的运算符从栈中弹出,直到栈顶运算符的优先级低于当前运算符,将该字符入栈。
  (5)重复上述操作(3)-(4)直至扫描完整个简单算术表达式,确定所有字符都得到正确处理,我们便可以将中缀式表示的简单算术表达式转化为逆波兰表示的简单算术表达式。
  下面是程序化算法流程:
  1、建立运算符栈stackOperator用于运算符的存储,压入'\0'。
  2、预处理表达式,正、负号前加0(如果一个加号(减号)出现在最前面或左括号后面,则该加号(减号)为正负号) 。
  3、顺序扫描表达式,如果当前字符是数字(优先级为0的符号),则直接输出该数字;如果当前字符为运算符或括号(优先级不为0的符号),则判断第4点 。
  4、若当前运算符为'(',直接入栈;
  若为')',出栈并顺序输出运算符直到遇到第一个'(',遇到的第一个'('出栈但不输出;
  若为其它,比较stackOperator栈顶元素与当前元素的优先级:
  如果 栈顶元素 >= 当前元素,出栈并顺序输出运算符直到 栈顶元素 < 当前元素,然后当前元素入栈;
  如果 栈顶元素 < 当前元素,直接入栈。
  5、重复第3点直到表达式扫描完毕。
  6、顺序出栈并输出运算符直到栈顶元素为'\0'。
  各运算符及符号优先级:
  '\0': -1
  ')': 1
  '(': 2
  '+'、'-': 3
  '*'、'/'、'%': 4
  '^': 5
  其它: 0
分享到:
评论

相关推荐

    逆波兰表达式实现

    逆波兰表达式实现 逆波兰表达式是一种后缀表达式,通常用于表示数学表达式的计算顺序。它的特点是运算符在后面,先计算括号里的运算,然后计算乘除,最后计算加减。逆波兰表达式的实现可以通过栈或队列来实现。 逆...

    基于逆波兰表达式的计算程序

    逆波兰表达式,又称后缀表达式,是一种用于表示数学计算的符号表示法。它将操作符放在操作数之后,避免了使用括号,简化了运算过程。在基于逆波兰表达式的计算程序中,通常包括以下几个核心知识点: 1. **逆波兰...

    逆波兰表达式及其算法实现

    ### 逆波兰表达式及其算法实现 #### 一、引言 逆波兰表达式(Reverse Polish Notation, RPN)是一种特殊的数学表达式表示方法,它最初由波兰逻辑学家Jan Łukasiewicz提出。与传统的中缀表达式相比,逆波兰表达式...

    逆波兰表达式 c语言实现

    逆波兰表达式,又称后缀表达式,是一种在编译原理和计算机科学中常见的表示算术和逻辑表达式的方式。它的主要特点是操作符位于其操作数之后,这与我们常用的中缀表达式(操作符位于操作数之间)不同。这种表示方式在...

    转化为逆波兰表达式

    C语言:设计一个算法,将一般算术表达式转化为逆波兰表达式,并求逆波兰表达式的值。数据结构实验

    简易灰色逆波兰表达式计算器代码

    逆波兰表达式(Reverse Polish Notation,RPN)是一种没有括号且运算符放在操作数之后的数学表达式表示方式,常用于计算器设计。在这个简易的灰色逆波兰表达式计算器中,我们主要涉及以下几个关键知识点: 1. **逆...

    用二叉树存储逆波兰表达式

    逆波兰表达式是一种特殊的数学表示法,也称为后缀表达式。它将操作符放置在操作数之后,以此避免使用括号。这种表示法在计算和解析时特别有用,因为无需考虑运算符优先级,只需按照操作数出现的顺序进行计算即可。在...

    逆波兰表达式的C++实现

    逆波兰表达式,又称后缀表达式,是一种在计算领域广泛应用的数学表示方式,它将操作符放在操作数之后,避免了使用括号来明确运算优先级。这种表示方法非常适合用栈来处理,因为可以直观地按照“后进先出”(LIFO)的...

    逆波兰表达式算法_表达式_

    逆波兰表达式(Reverse Polish Notation,RPN)算法是一种基于后缀表示法的计算方法,主要用于解决数学表达式的求值问题。它将运算符放置在操作数之后,避免了括号的使用,使得表达式求值的过程更为直观。在这个算法...

    逆波兰表达式求值源代码

    逆波兰表达式求值是计算机科学中的一个重要概念,主要用于避免使用括号来表示运算优先级,从而简化表达式的解析过程。逆波兰表达式,又称后缀表达式,是一种没有括号、无需考虑运算符优先级的数学表达式书写方式。在...

    逆波兰表达式求解的程序(2种方法)

    逆波兰表达式,又称后缀表达式,是一种用于表示数学计算的符号表示法。它将操作符放在操作数之后,避免了使用括号来决定运算的优先级,从而简化了解析过程。本教程将介绍两种在C/C++或Linux环境下求解逆波兰表达式的...

    易语言源码逆波兰表达式计算易语言源码.rar

    易语言源码逆波兰表达式计算易语言源码.rar 易语言源码逆波兰表达式计算易语言源码.rar 易语言源码逆波兰表达式计算易语言源码.rar 易语言源码逆波兰表达式计算易语言源码.rar 易语言源码逆波兰表达式计算易语言...

    将一个字符串转换为其逆波兰表达式

    逆波兰表达式,又称后缀表达式,是一种不使用括号的数学表达式表示方法,它使用栈的数据结构来解析和计算表达式。在逆波兰表达式中,运算符位于其操作数之后,使得表达式的解析更为简单。本篇文章将详细讲解如何用...

    用java和逆波兰表达式写的计算器

    逆波兰表达式(Reverse Polish Notation,RPN)是一种数学表达式表示方法,它不需要使用括号,而是通过运算符后置的方式明确运算顺序。在RPN计算器中,运算符紧跟在其操作数之后,使得计算过程更为简洁。这种表示法...

    利用堆栈实现逆波兰表达式 后缀法

    ### 利用堆栈实现逆波兰表达式(后缀法) #### 一、逆波兰表达式简介 逆波兰表达式,又称后缀表达式或后缀记法,是一种没有括号且运算符位于操作数之后的数学表达式书写方式。在计算机科学中,这种表达式被广泛...

    逆波兰表达式.cpp

    逆波兰表达式的长 度不超过一行,以 "$"作为输入结束,操作数之间用空格分隔,操作符只可能有+、—、*、/四种 运算。例如: 23434 + 2*$。 数据结构作业

    java逆波兰表达式【栈】完整版

    【数据结构与算法】逆波兰表达式完整版,使用java语言编写。逆波兰表达式又叫做后缀表达式,是一种没有括号,并严格遵循“从左到右”运算的后缀式表达方法

Global site tag (gtag.js) - Google Analytics