创建栈的方法如下
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年前深入学习过,觉得这本书非常好,现在有时间想多多看看我以前看过的书籍。