栈是一种遵从后进先出(LIFO)原则的有序集合,新添加的或待删除的元素都保存在栈的同一端,称为栈顶,另一端称为栈底。
生活中常见的例子就是,一堆盘子放在桌上,后放的盘子,先拿出来。
es5方法实现
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 }
}
应用1:进制转换
1,10进制转2进制
num=10
num=num/2=5 ---0
num=num/2=2 ---1
num=num/2=1 ---0
num=num/2=0 ---1
10变成二进制为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
}
应用2:10进制转n(2,8,16)进制
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
}