一、是什么:
前缀表达式--------------波兰式-
后缀表达式-----------------逆波兰式
举例如下:
(3+4)*5-6就是中缀表达式
-*+3456就是前缀表达式
34+5*6-就是后缀表达式
二、思路:
从左向右遍历数组,遇到数字就进栈,
遇到运算符,连续出2次栈,2个出栈元素结合运算符进行运算,将运算结果入栈。
三、代码:
<script>
console.log((3+4)*5-6);
var str= '34+5*6-';
function postfixExpression(str) {
var temp;// 计算结果
var arr=str.split(''); // 转为字符串数组,来遍历
var stack=[];// 用数组模拟栈的操作
var num=['1','2','3','4','5','6','7','8','9'];
for(var i=0;i<arr.length;i++){ // 遍历数组
if(num.includes(arr[i])){
// 遇到字符,进栈
stack.push(arr[i]);
}else{
// 遇到操作符连续2次出栈,进行计算,并将计算结果重新入栈
var num1=stack.pop(); //4
var num2=stack.pop(); // 3
temp=calculation(num1,num2,arr[i]);
stack.push(temp);
}
}
return temp;
}
// 计算过程
function calculation(num1,num2,ope) {
switch (ope){
case '+':
return parseInt("10", num2)+parseInt("10", num1);
case '-':
return parseInt("10", num2)-parseInt("10", num1);
case '*':
return parseInt("10", num2)*parseInt("10", num1);
case '/':
return parseInt("10", num2)/parseInt("10", num1);
}
}
console.log(postfixExpression(str)) ;
</script>
</body>
</html>