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))
相關文章
相關標籤/搜索