创建栈的方法如下
function Stack(){
var items = []
// push添加元素到栈顶
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)
}
}
var Stack = new Stack()
Stack.push(5)
console.log(Stack.peek())
console.log(Stack.size())
Stack.pop()
console.log(Stack.size())
console.log(Stack.isEmpty())
利用栈的原理实现十进制转二进制的函数方法
// 十进制转二进制
function divideBy2(decNumber){
var remStack = new Stack(),
rem,//余数
binaryString = '';//二进制数
while(decNumber>0){
rem = Math.floor(decNumber%2);//余数
remStack.push(rem);//比如011
decNumber = Math.floor(decNumber/2);//取整数
}
while(!remStack.isEmpty()){
binaryString += remStack.pop().toString();////输出110 先进后出
}
return binaryString;
}
由十进制转二进制的方法,推广为十进制转任意进制
// 十进制转成任意进制
function baseConverter(decNumber,base){
var remStack = new Stack(),
rem,
baseString = '',
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数据结构与算法》
这本书我2年前深入学习过,觉得这本书非常好,现在有时间想多多看看我以前看过的书籍。