javascript数据结构与算法--栈

引言

栈是遵循后进先出(LIFO)的数据存储结构。当然js中的栈也是建立在array基础上的,对array不熟悉的伙伴可以看一下我写的关于arry的博文《javascript基础–array》

1.栈的创建

function Stack(){//声明一个Stack类
    var items = [];//数组存储栈内容
    //push方法用于向栈顶推入新元素
    this.push = function(element){
        items.push(element);
    //pop方法用于弹出栈顶元素
    this.pop = function(){
        return items.pop();
    };
    //peek方法用于返回栈顶元素,栈内容不改变
    this.peek = function(){
        return items[items.length - 1];
    };
    //isEmpty方法用于检验栈是否为空
    this.isEmpty = function(){
        return items.length == 0;
    };
    //size返回栈的长度
    this.size = function(){
        return items.length;
    };
    //clear清除栈所有内容
    this.clear = function(){
        items = [];
    };
    //print打印栈所有内容
    this.print = function(){
        console.log(items.toString());
    };
}

2.栈的使用

var stack = new Stack();
console.log(stack.isEmpty());//true
stack.push(5);
stack.push(8);
console.log(stack.peek());//8
stack.push(11);
console.log(stack.size());//3
console.log(stack.isEmpty());//false
stack.push(15);
stack.pop();
stack.pop();
console.log(stack.size());//2
stack.print();//[5,8]

3.栈的算法实例

十进制转二进制:

function divideBy2(decNumber){
    var remStack = new Stack(),//存储余数
        rem,//每次整除后的余数
        binaryString = '';//最后将返回的二进制字符串
    while(decNumber > 0){
        rem = Math.floor(decNumber % 2);
        remStack.push(rem);
        decNumber = Math.floor(decNumber / 2);
    }
    while(!remStack.isEmpty()){
        binaryString += remStack.pop().toString(); 
    }
    return binaryString;
}

推演:十进制转换为任意进制

function baseConverter(decNumber,base){
    var remStack = new Stack(),//存储余数
        rem,//每次整除后的余数
        baseString = '';//最后将返回的进制字符串
        digits = '0123456789ABCDEF';//超过10变为A
    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数据结构和算法的学习总结,相当于把书变薄的一个过程吧!

你可能感兴趣的:(javascript数据结构与算法--栈)