javascript 栈(Stacks)算法与说明

栈的介绍

栈是一种遵从后进先出(LIFO)原则的有序集合。新添加的或待删除的元素都保存在栈的末尾,称作栈顶,另一端就叫栈底。在栈里,新元素都是靠近栈顶,旧元素都接近栈底。

其实就想书堆一样,新的书就放在上面。如果要拿下面的书,必须先把上面的书拿走才能,才能拿到想要的书。准照后进先出原则。


再讲解一下:

如图。有三个元素的栈,栈顶是100[2],栈底是81[0]。整个栈长度为3。



如图,删除栈的第一个元素把栈顶15给删除,栈的长度4也变成3个。再删除第一个元素,栈顶11给删除,剩下栈就是8,5。

栈的代码实现
ES6代码

class Stack {

    constructor () {
        this.items = [];
    }

    push(...element){//添加一个(或几个)新元素到栈顶。
        this.items.push(...element);
    }

    pop(){//移除栈顶的元素,同时返回呗移除的元素。
        return this.items.pop();
    }

    peek(){//返回栈顶的元素(不对栈做任何修改)。
        return this.items[this.items.length-1];
    }

    isEmpty(){//如果栈里没有任何元素就返回true,否则返回false。
        return this.items.length == 0;
    }

    size(){//返回栈里的元素个数。
        return this.items.length;
    }

    clear(){//移除栈里的所有元素。
        this.items = [];
    }

    print(){//打印栈里的元素。
        console.log(this.toString());
    }

    toString(){//把栈里的数据转成String返回。
        return this.items.toString();
    }
}

let stack = new Stack()//实例化

栈的使用案例

用一个10进制转2进栈的举例子。进制转发也是先除判断是否有余,保存一个是否有余的标示,再往下再次除,重复这个过程,直到数除完为0,依次排列起来(0101)。栈输出为(1010)如下图。

进制转换方法

function baseConverter(decNumber, base){//修改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;
}

console.log(baseConverter(10, 2));//1010
console.log(baseConverter(100345, 8));//303771
console.log(baseConverter(100345, 16));//187F9
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值