`
stephen4留雨
  • 浏览: 19774 次
文章分类
社区版块
存档分类
最新评论

逆波兰表示法

 
阅读更多
逆波兰表示法
逆波兰记法中,操作符置于操作数的后面。例如表达“三加四”时,写作“3 4 +”,而不是“3 + 4”。如果有多个操作符,操作符置于第二个操作数的后面,所以常规中缀记法的“3 - 4 + 5”在逆波兰记法中写作“3 4 - 5 +”:先3减去4,再加上5。使用逆波兰记法的一个好处是不需要使用括号。例如中缀记法中“3 - 4 * 5”与“(3 - 4)*5”不相同,但后缀记法中前者写做“3 4 5 * -”,无歧义地表示“3 (4 5 *) −”;后者写做“3 4 - 5 *”。
逆波兰表达式的解释器一般是基于堆栈的。解释过程一般是:操作数入栈;遇到操作符时,操作数出栈,求值,将结果入栈;当一遍后,栈顶就是表达式的值。因此逆波兰表达式的求值使用堆栈结构很容易实现,和能很快求值。
注意:逆波兰记法并不是简单的波兰表达式的反转。因为对于不满足交换律的操作符,它的操作数写法仍然是常规顺序,如,波兰记法“/ 6 3”的逆波兰记法是“6 3 /”而不是“3 6 /”;数字的数位写法也是常规顺序。

代码实现:
package test;

import java.util.Stack;

public class evalRPN {

	public static void main(String[] args) {
		// String[] tokens = {"2", "1", "+", "3", "*"};
		String[] tokens = { "4", "13", "5", "/", "+" };

		// evalRPN.evalRPN(tokens);
		System.out.println(evalRPN.evalRPN(tokens));
	}

	public static int evalRPN(String[] tokens) {

		Stack<String> stack = new Stack<String>();

		for (String s : tokens) {

			switch (s) {

			case "+": {
				int a = Integer.valueOf(stack.pop());
				int b = Integer.valueOf(stack.pop());
				String c = String.valueOf(a + b);
				stack.push(c);
				break;
			}

			case "-": {
				int a = Integer.valueOf(stack.pop());
				int b = Integer.valueOf(stack.pop());
				String c = String.valueOf(b - a);
				stack.push(c);
				break;
			}
			case "*": {
				int a = Integer.valueOf(stack.pop());
				int b = Integer.valueOf(stack.pop());
				String c = String.valueOf(a * b);
				stack.push(c);
				break;
			}
			case "/": {
				int a = Integer.valueOf(stack.pop());
				int b = Integer.valueOf(stack.pop());
				String c = String.valueOf(b / a);
				stack.push(c);
				break;
			}
			default:
				stack.push(s);
			}

		}

		return Integer.valueOf(stack.pop());

	}

}



分享到:
评论

相关推荐

    计算器中使用逆波兰表示法

    ### 计算器中使用逆波兰表示法 #### 逆波兰表示法简介 逆波兰表示法(Reverse Polish Notation,简称RPN),又称后缀表达式,是一种在数学表达式中不使用括号来确定运算优先级的方法。在这种表示法中,操作数总是...

    逆波兰表示法和表达式四元式.pdf

    逆波兰表示法和表达式四元式 逆波兰表示法(后缀表示法)是一种将中缀表示法转换为后缀表示法的方法。它将中缀表达式转换为一个运算符紧跟着其操作数的顺序,例如,中缀表达式"E = E1 + E2"将被转换为逆波兰表示法...

    编译原理-逆波兰表示法C++

    逆波兰表示法(Reverse Polish Notation,RPN)是一种数学表达式表示方法,它无需使用括号,通过操作符后置的方式避免了运算优先级的困扰。在编译原理中,逆波兰表示法通常用于表达式求值和设计简单的解析器。本教程...

    逆波兰表示法实现四则运算

    逆波兰表示法,又称后缀表示法,是一种数学表达式表示方法,它将操作符放在操作数之后。这种表示方式在计算机科学中被广泛应用,特别是在编译器设计、计算器程序和算法实现等领域。本项目旨在利用逆波兰表示法实现一...

    表达式求值(逆波兰式法)

    逆波兰式,也被称为后缀表达式,是一种用于表示数学表达式的符号表示法。在逆波兰式中,操作符位于其操作数之后,这与我们常见的中缀表达式(如2 + 3 * 4)不同,中缀表达式中操作符位于操作数之间。逆波兰式法是一...

    中缀表达式到后缀表达式的转换,后缀表达式求值(逆波兰表示法)vc

    为了解决这个问题,引入了后缀表达式,也称为逆波兰表示法。后缀表达式将运算符放在操作数之后,如 `2 3 4 * +`,这使得表达式的计算变得非常简单。 转换从中缀表达式到后缀表达式的过程主要基于两个栈:一个操作数...

    后缀表达式(也称为逆波兰表示法)求值的过程是通过栈来实现的

    后缀表达式,又称逆波兰表示法(Reverse Polish Notation, RPN),是一种数学表达式的表示方法。与传统的中缀表达式不同,在后缀表达式中,运算符位于其操作数之后。这种表示方式的主要优点是可以避免使用括号来指定...

    逆波兰式的生成-(代码+原理图)

    通过该实验,我们掌握了逆波兰式的原理和实现方法,并且能够将算术表达式转换为逆波兰式,并计算用逆波兰式表示的算术表达式的值。 逆波兰式的生成步骤包括: 1. 在表达式字符串的末尾加一个代表结束的辅助符,...

    C语言逆波兰表示法计算表达式的值

    读取输入字符存入数组中,逐个扫描数组元素遇操作数进栈,遇运算符计算并将结果进栈继续上述过程,直至数组读取完

    布尔检索式的逆波兰变换&准波兰变换

    与传统的中缀表示法相比,逆波兰表示法无需括号即可明确表达操作顺序,这使得它非常适合于计算机内部的操作。 在本实验报告中,我们主要探讨如何利用逆波兰变换来处理布尔检索式。具体来说,实验要求我们编写一个...

    算术表达式解析模板代码 逆波兰

    逆波兰表示法,又称后缀表示法,是数学表达式的一种表示方式,它将运算符放在操作数之后,使得表达式无需括号就能明确运算顺序。这种表示法在计算机科学中,特别是在编译原理、算法设计和计算理论等领域有着广泛的...

    栈-逆波兰表达法 C++题目+解答

    逆波兰表示法是一种表示法,其中每个运算符都在其所有操作数的后面出现。例如,表达式(1+2)×(5+4)可以表示为逆波兰表达式1 2 + 5 4 + ×。逆波兰表示法的优点之一是它没有括号。编写一个程序,读取逆波兰表示法中的...

    用C语言编写的逆波兰程序

    在提供的代码片段中,可以看到作者已经实现了基本的逆波兰表示法转换逻辑,包括输入表达式、转换为逆波兰表示法等核心功能。通过这些功能,用户可以方便地将普通的数学表达式转换为便于计算机处理的形式。 综上所述...

    四则运算求值(中缀转逆波兰式)

    逆波兰表示法(Reverse Polish Notation,RPN),也被称为后缀表示法,是一种没有括号的数学表达式表示方式,它通过将运算符放在操作数之后来简化表达式的计算。 首先,我们需要理解中缀表达式是我们通常在日常生活...

    逆波兰计算器C++源码

    逆波兰计算器,也被称为后缀表达式计算器,是基于数学中的逆波兰表示法(Reverse Polish Notation, RPN)设计的一种计算模型。这种计算器的工作原理是将运算符置于其操作数之后,使得计算过程无需使用括号来明确...

    C语言通过逆波兰式实现四则运算

    通过把输入的中缀表达示转换为逆波兰式实现整数及小数的四则运算,为了简便,这个程序只支持小括号,中括号和大括号暂不支持,需要的话自己插入几句代码就行了。 gcc下编译通过,没在window下测试。

    逆波兰表示法.pptx

    博客配套资源https://blog.csdn.net/qq_32439305/article/details/105620451

    编译原理中逆波兰式的生成实验

    逆波兰式,又称后缀表达式,是一种不使用括号来表示运算优先级的数学表达式表示方法。在编译原理中,逆波兰式的生成是一项重要的技术,用于将常见的中缀表达式(即我们日常使用的数学表达式形式)转换为更易于计算机...

    逆波兰计算器程序代码

    在逆波兰表示法中,表达式中的运算符放在它们的操作数后面,例如,“3 + 4”在逆波兰表示法中写作“3 4 +”。这种表示法可以避免使用括号来指示优先级,并且可以直接用于栈式计算。 #### 二、程序代码分析 根据...

    逆波兰计算器--C语言实现

    1. **逆波兰表示法**:在逆波兰表示法中,运算符位于其操作数之后。例如,常规的表达式 "2 + 3" 在逆波兰表示法中为 "2 3 +"。这种方式避免了括号的使用,使得解析和计算更为简单。 2. **栈数据结构**:栈是一种...

Global site tag (gtag.js) - Google Analytics