棧是一種遵從后進(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
}