Java前缀表达式、中缀表达式、后缀表达式

Java前缀表达式、中缀表达式、后缀表达式前言示例中缀表达式转后缀表达式中缀表达式转前缀表达式与转后缀的区别代码实现计算前缀表达式总结前言前两天有兴趣看看一些老算法,自己动手做了做,记一下过程中的小问题。基础知识:表达式:一个通用的算术或逻辑公式表示方法。中缀表达式是一个通用的算术或逻辑公式表示方法, 操作符是以中缀形式处于操作数的中间(例:3 + 4),中缀表达式是人们常用的算术表示...
摘要由CSDN通过智能技术生成

前言

  • 前两天有兴趣看看一些老算法,自己动手做了做,记一下过程中的小问题。
  • 基础知识
  • 表达式:一个通用的算术或逻辑公式表示方法。
  • 中缀表达式是一个通用的算术或逻辑公式表示方法, 操作符是以中缀形式处于操作数的中间(例:3 + 4),中缀表达式是人们常用的算术表示方法。
    与前缀表达式(例:+ 3 4)或后缀表达式(例:3 4 +)相比,中缀表达式不容易被计算机解析,因为它符合人们的普遍用法。
    与前缀或后缀记法不同的是,中缀记法中括号是必需的。计算过程中必须用括号将操作符和对应的操作数括起来,用于指示运算的次序。

示例

  • 中缀表达式:3+4-5
  • 后缀表达式:34+5-
  • 前缀表达式:±543

中缀表达式转后缀表达式

  • 方法步骤:
  • 中缀表达式转后缀表达式:
  • 1、初始化两个栈:运算符栈S1和储存中间结果栈S2
  • 2、从左至右扫描中缀表达式
  • 3、遇到操作数时,将其压入栈S2
  • 4、遇到运算符时,比较其与S1栈顶运算符的优先级
  • 4.1、如果S1为空,或者栈顶元素为左括号,则直接将其压入S1
  • 4.2、否则,若优先级比S1栈顶元素高,也将运算符压入S1(注意,相等和小于都不行)
  • 4.3、否则,将S1栈顶的运算符压入到S2中,再次转到(4.1)与新的栈顶元素相比较
  • 5、遇到括号时
  • 5.1、如果是左括号,直接将其压入栈S1
  • 5.2、如果是右括号,则依次弹出栈S1中的元素,直到遇到右括号为止,并将这对括号废除掉
  • 6、重复上述2~5的步骤,直到扫描到表达式的最右边
  • 代码实现:
public static void main(String[] args) {
   
		//1、首先创建两个栈,运算符栈S1和储存中间结果栈S2
		Stack<String> S1 = new Stack();
		Stack<String> S2 = new Stack();
		//2、创建一个运算符的Map,映射其优先级
		Map<String,Integer> operator = new HashMap();
		operator.put("+", 1);
		operator.put("-", 1);
		operator.put("*", 2);
		operator.put("/", 2);
		operator.put("(", -1);
		operator.put(")", -2);
		//3、取中缀表达式
		String input = "(6+4)/2*3"; //6, 4, +, 2, /, 3, *
		for(int i=0;i<input.length();i++) {
   
			String uN = String.valueOf(input.charAt(i));
			//1、当遇到操作数时
			if(!operator.containsKey(uN)) {
   
				S2.add(uN);
				continue;
			}else if(operator.get(uN)>0){
   //2、当遇到运算符时
				while(true) {
   
					//2.1如果S1为空,或者栈顶元素为"(",则直接将此运算符入符号栈
					if(S1.isEmpty() || operator.get(S1.peek())==-1
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值