js数据结构之栈

栈(stack)又名堆栈,它是一种运算受限的线性表。其限制是仅容许在表的一端进行插入和删除运算。这一端被称为栈顶,相对地,把另外一端称为栈底。向一个栈插入新元素又称做进栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称做出栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。javascript

栈一般的操做:java

stack()        // 建立一个空的栈对象
push()         // 入栈操做,将元素放至栈顶
pop()          // 出栈操做,将栈顶元素移除并返回
peek()         // 返回栈顶元素,不对栈作出操做
isEmpty()      // 判断栈是否是为空
size()         // 返回栈的元素个数

使用javascript模拟栈的实现:ide

function Stack () {
  let items = []
  this.push = function (element) {
    //添加一个(或几个)新元素到栈顶
    items.push(element)
  }
  this.pop = function () {
    //移除栈顶的元素,同时返回被移除元素
    return items.pop()
  }
  this.peek = function () {
    //返回栈顶的元素,但并不对栈作任何修改
    return items[items.length - 1]
  }
  this.isEmpty = function () {
    // 判断栈是否是为空
    return items.length === 0
  }
  this.size = function () {
    // 返回栈里元素的个数
    return items.length
  }
  this.clear = function () {
    // 移除栈里全部的元素
    items = []
  }
  this.print = function () {
    console.log(items.toString())
  }
  this.toString = function () {
    return items.toString()
  }
}

用栈解决进制数转换问题:this

function divide (num, base) {
   // num为须要转换的数, base为要转换的基数
  let remStack = new Stack(),
      rem,
      remString = ''
  while (num > 0) {
    rem = Math.floor(num % base)
    remStack.push(rem)
    num = Math.floor(num / base)
  }
  while (!remStack.isEmpty()) {
    remString += remStack.pop()
  }
  return remString
}

console.log(divide(18,16))
相关文章
相关标签/搜索