数据结构(Java)——逆波兰表达式

逆波兰表达式

前缀、中缀、后缀表达式的规则

前缀表达式

前缀表达式也叫波兰表达式,他的运算符位于操作数之前。规则如下:

1)从右到左扫描,将数字压入堆栈中,
2)遇到运算符将栈顶元素和栈顶次元素弹出计算,
3)将计算结果压入栈中,重复上述操作知道得出最后结果

前缀表达式的样子—— - * + 3 4 5 6 ==>(3+4)*5-6

中缀表达式

中缀表达式就是我们常见的那种表达式,这种表达式方便人去理解,但是计算机不容易理解。

中缀表达式的样子—— (3+4)*5-6

后缀表达式

后缀表达式也叫逆波兰表达式,他是计算机最容易理解的一种方式。

1)从左至右扫描表达式,遇到数字时,将数字压入堆栈,
2)遇到运算符时,弹出栈顶的两个数,用运算符对它们做相应的计算(次顶元素和栈顶元素),并将结果入栈;
3)重复上述过程直到表达式最右端,最后运算得出的值即为表达式的结果

后缀表达式的样子—— 3 4 + 5 * 6 - ==> (3+4)*5-6

接下来是用逆波兰表达式实现计算器

计算器的实现

实现栈的操作

Stack s1 = new Stack();

思路如下

这里是要将list辅助栈来实现的,先将字符串遍历加入到list里面,通过循环遍历list来实现计算

详细代码

public static void main(String[] args) {
   
		// TODO 自动生成的方法存根
		//先定义给逆波兰表达式
		//(30+4)X5-6 => 304+5 X 6-=> 164
		//4*5-8+60+8/2->45*8-60+82/+
		//测试
		//说明为了方便,逆波兰表达式的数字和符号使用空格隔开
		//String suffixExpression= "304+5*6-";
		String sufixExpression= "45* 8-60+82/+";// 76
		//思路
		//1.先将"34+5 X 6-"=>放到ArrayList中.
		//2.将ArrayList 传递给一个方法,遍历ArrayList配合栈完成计算
		List<String> list = getListString(sufixExpression);
		System.out.println("rpnList=" + list);
		int res = calculate(list);
		System.out.println("计算的结果是=" + res);

	}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

痞子三分冷ゾジ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值