立诚勿怠,格物致知
It's all about connecting the dots

Stack built with Javascript

栈是一种遵从后进先出(LIFO,last-in-first-out)原则的有序集合。新添加的活待删除的元素都保存在栈的末尾,称作栈顶,另一端就叫栈底。在栈里,新元素都靠近栈顶,旧元素都接近栈底。

一个用来表示栈的类


class Stack {
  constructor () {
    this.items = []
  }
  /**
   * *********************************************************************************
   *                                                                                  *
   * 核心方法
   *                                                                                  *
   ***********************************************************************************/
  // 添加一个(或几个)新元素到栈顶
  push (...elements) {
    for (let elem of elements) {
      this.items.push(elem)
    }
  }
  // 移除栈顶的元素,同时返回被移除的元素
  pop () {
    return this.items.pop()
  }
  /**
   * *********************************************************************************
   *                                                                                  *
   * 辅助方法
   *                                                                                  *
   ***********************************************************************************/
  // 返回栈顶的元素,不对栈做任何修改(这个方法不会移除栈顶的元素,仅仅返回它)
  peek () {
    return this.items[this.items.length - 1]
  }
  // 如果栈里没有任何元素就返回true,否则返回false
  isEmpty () {
    return this.items.length === 0
  }
  // 移除栈里的所有元素
  clear () {
    this.items = []
  }
  // 返回栈里的元素个数,这个方法和数组的length属性类似
  size () {
    return items.length
  }
  // 打印栈里的所有元素
  print () {
    console.log(this.items.toString())
  }
}

Stack类的使用


// 十进制数转化成二进制、八进制或十六进制数
function baseConverter (decNumber, base = 2) {
  let remStack = new Stack()
  let rem
  let baseString = ''
  let digits = '0123456789ABCDEF'
  while (decNumber > 0) {
    rem = Math.floor(decNumber % base)
    remStack.push(rem)
    decNumber = Math.floor(decNumber / base)
  }
  while (!remStack.isEmpty()) {
    baseString += digits[remStack.pop()]
  }
  return baseString
}

参考资料

《学习JavaScript数据结构与算法》

赞(0) 打赏
文章名称:《Stack built with Javascript》
文章链接:https://www.orzzone.com/stack-built-with-javascript.html
商业联系:yakima.public@gmail.com

本站大部分文章为原创或编译而来,对于本站版权文章,未经许可不得用于商业目的,非商业性转载请以链接形式标注原文出处。
本站内容仅供个人学习交流,不做为任何投资、建议的参考依据,因此产生的问题需自行承担。

评论 抢沙发

觉得文章有用就打赏一下文章作者

非常感谢你的打赏,我们将继续给力提供更多优质内容!

支付宝扫一扫打赏

微信扫一扫打赏

登录

找回密码

注册