在栈与队列这一章节,逆波兰表达式一定是非常重要的一个知识点,在书中对逆波兰表达式的介绍比较冗余,而且书面化的语言生涩难懂,自己去看的话不但需要花费大量时间,而且不一定能够理解。在这我给大家分享一下我自己的一个理解方法,相对于我来说是比较容易理解的,只是在书写的时候可能会稍微有些麻烦。
基本理解
在学习逆波兰表达式之前,首先要对逆波兰表达式有个基本理解:将普通的计算表达式转换成逆波兰表达式后每一个数字的顺序是不能改变,相应的将波兰表达式转换成普通表达式数字顺序也是不能变得的,比如:3+1 => 3 1 +;3*(2+1) => 3 2 1 + * ,不论式子中怎么变化,数字的顺序是不能改变的。既然作为自己总结的,那么与原来的肯定就要有些许不同,对于逆波兰表达式转换成普通表达式大家可以放心使用;但是对于普通表达式转换成逆波兰表达式,大家就需要注意一下了,这个或许总结的不是特别全面,但是在遇到问题并且不会的情况下可以尝试使用,这个规律适合有一定基础或者零基础但是需要紧急找到一个简单方法的同学。好,接下来大家把书中看到的通通忘掉,继续向下看。
个人理解(重点!!!)
逆波兰表达式转换成普通表达式
首先就是将逆波兰表达式转换成普通表达式:记住一句话:遇到符号就将符号之前的两个数拿出来,用第一个数操作第二个数并且加上括号,放到原来的位置。
例如:10,6,9,3,+,-11,*,/,*,17,+,5,+,
转换成普通表达式就是((10*(6/((9+3)*(-11))))+17)+5,
稍微去掉几个括号就是10*(6/((9+3)*(-11)))+17+5
切记,遇到符号才拿出两个数,用第一个数操作第二个数加上括号后放到原来的位置,得到的就是普通表达式;如果需要求值得话,则直接将这两个数的结果算出来放到取出数据的位置即可。
普通表达式转换成波兰表达式
方法:将普通表达式按照计算顺序使用括号括起来,然后从内层逐渐向外层解括号,注意:数字放置顺序要和原式子相等,运算符顺序就向后排即可。
以上就是我对逆波兰表达式与普通表达式转换的理解,如果有哪些地方有更好的解决方法或者出现错误,希望各位同学和大佬及时指正♪(´▽`)