跟我一起创建栈

可紊 提交于 2019-11-27 04:11:56

创建栈的方法如下

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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!