棧 --js實(shí)現(xiàn)

棧是一種遵從后進(jìn)先出(LIFO)原則的有序集合,新添加的或待刪除的元素都保存在棧的同一端,稱為棧頂,另一端稱為棧底。
生活中常見的例子就是,一堆盤子放在桌上,后放的盤子,先拿出來。

es5方法實(shí)現(xiàn)

function Stack(){
  let items=[]
  this.push=function(val){
  items.push(val)
  }
  this.pop=function(){
  return items.pop()
  }
  this.size=function(){
     return items.length
  }
  this.print=function(){
     console.log(items) 
 }
this.isEmpty=function(){
    return items.length===0 }
}

應(yīng)用1:進(jìn)制轉(zhuǎn)換

1,10進(jìn)制轉(zhuǎn)2進(jìn)制
num=10
num=num/2=5 ---0
num=num/2=2 ---1
num=num/2=1 ---0
num=num/2=0 ---1
10變成二進(jìn)制為1010

function divideBy2(num){
var remStack=new Stack(),result='',rem
while(num>0){
rem=Math.floor(num%2)
remStack.push(rem)
num=Math.floor(num/2)
}
remStack.print()
while(!remStack.isEmpty()){
  result+=remStack.pop().toString()
}
return result
}

應(yīng)用2:10進(jìn)制轉(zhuǎn)n(2,8,16)進(jìn)制

function divideBy2(num,base){
var remStack=new Stack(),result='',rem,digits='0123456789ABCDEF'
while(num>0){
rem=Math.floor(num%base)
remStack.push(rem)
num=Math.floor(num/base)
}
remStack.print()
while(!remStack.isEmpty()){
  result+=digits[remStack.pop()]
}
return result
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容