数据结构(十二):前中后缀表达式

本文介绍了前缀、中缀和后缀表达式,特别是前缀表达式(波兰表达式)和后缀表达式(逆波兰表达式)。详细解释了它们的计算机求值顺序,并提供了将中缀表达式转换为后缀表达式的代码实现。通过这个过程,可以更清晰地理解这些表达式的计算逻辑和它们在计算机科学中的应用。
摘要由CSDN通过智能技术生成

前缀表达式(波兰表达式)

前缀表达式运算符位于操作数之前距离,(3+4)*5-6对应的前缀表达式就是-*+3456

计算机求值顺序:从右向左扫描,遇到数字压入堆栈,遇到运算符时,弹出栈顶的两个数字,用运算符对他们做出相应的计算,并将结果入栈

 

中缀表达式

人经常书写的,但计算机难以理解,常转换成后缀表达式(逆波兰表达式)

 

后缀表达式

计算机求值顺序:从左到右扫描,遇到数字压入堆栈,遇到运算符,弹出栈顶两个数,用运算符计算,并将结果入栈,重复上述的过程。(3+4)*5-6对应的后缀表达式就是34+5*6-

 

逆波兰表达式的代码实现

package com.atguigu.stack;

import java.util.ArrayList;
import java.util.List;
import java.util.Stack;

public class PolandNotation {

    public static void main(String[] args) {
        
        
        //完成将一个中缀表达式转成后缀表达式的功能
        //说明
        //1. 1+((2+3)×4)-5 => 转成  1 2 3 + 4 × + 5 –
        //2. 因为直接对str 进行操作,不方便,因此 先将  "1+((2+3)×4)-5" =》 中缀的表达式对应的List
        //   即 "1+((2+3)×4)-5" => ArrayList [1,+,(,(,2,+,3,),*,4,),-,5]
        //3. 将得到的中缀表达式对应的List => 后缀表达式对应的List
        //   即 ArrayList [1,+,(,(,2,+,3,),*,4,),-,5]  =》 ArrayList [1,2,3,+,4,*,+,5,–]
        
        String expression = "1+((2+3)*4)-5";//注意表达式 
        List<String> infixExpressionList = toInfixExpressionList(expression);
        System.out.println("中缀表达式对应的List=" + infixExpressionList); // ArrayList [1,+,(,(,2,+,3,),*,4,),-,5]
        List<String> suffixExpreesionList = parseSuffixExpreesionList(infixExpressionList);
        System.out.println("后缀表达式对应的List" + suffixExpreesionList); //ArrayList [1,2,3,+,4,*,+,5,–] 
        
        System.out.printf("expression=%d", calculate(suffixExp

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值