首页 文章详情

计算表达式

约 1 分钟阅读

计算表达式拆解

本例子使用数组实现栈,在栈的基础上 实现计算表达式

一、定义栈

function Stack(){
  var items = []
  
  this.push = function(item){
    items.push(item)
  }
  
  this.pop = function(){
    return items.pop()
  }
  
  this.isEmpty = function(){
    return items.length === 0
  }
  
  this.size = function(){
    return items.length
  }
  
  this.top = function(){
    return items[items.length - 1]
  }
  
  this.clear = function(){
    items = []
  }
}

二、用上述栈先来实现一个判断左右括号闭合的方法

var stack = new Stack()
// validator
// 只入栈括号,
function isLegal(param){
  for(var i = 0; i<param.length; i++){
    var item = param[i]
    if(item === '('){
      stack.push(item)
    }else if(item === ')'){
      if(stack.isEmpty()){
        return false
      }else{
        stack.pop()
      }
    }
  }
  return stack.isEmpty()
}

isLegal("((abc))")

三、实现一个计算后缀表达式

function calculate(expressionList){
  var data_stack = new Stack()
  for(var i = 0; i < expressionList.length; i++){
  	var item = expressionList[i]
    if(['+', '-', '*', '/'].indexOf(item) >= 0){
      var pre = data_stack.pop()
      var next = data_stack.pop()
      var result = next + item + pre
      result = parseInt(eval(result))
      stack.push(result)
    }else{
      stack.push(item)
    }
  }
  return stack.pop()
}
calculate(['4','13', '5', '/', '+'])

评论

正在加载评论...

相关文章