美文网首页
JavaScript描述数据结构与算法 -- 栈

JavaScript描述数据结构与算法 -- 栈

作者: 广告位招租 | 来源:发表于2017-10-04 16:26 被阅读0次

    栈是一种特殊的列表,一种后进先出的数据结构。任何不在栈顶的元素都无法访问。为了得到栈底的元素,必须拿先拿掉上面的元素。所以就有了入栈和出栈。

    此例,利用了数组来充当数据仓库,入栈使用push()方法,出栈使用pop()方法。

     *  使用var stack = new Stack() 创建一个栈实例
     * 实例属性
     *  this.dataStore 初始化空数组,数据仓库
     *  this.top 记录栈顶的位置
     * 实例方法
     *  push(ele) 栈顶添加一个元素
     *  pop() 弹出栈顶元素
     *  peek() 返回当前栈顶元素(top值不会修改,仅查看)
     *  length() 返回当前元素个数
     *  clear() 清空栈
    

    具体实现方法

        function Stack() {
            this.dataStore = []; //初始化空数组保存
            this.top = 0; //记录栈顶位置
        };
        /*
         *push()栈顶添加一个数据
         *param{ele} 添加的元素
         */
        Stack.prototype.push = function(ele) {
            this.dataStore[this.top++] = ele;
        };
        //移除栈顶元素top值会修改
        Stack.prototype.pop = function() {
            let _pop = this.dataStore.pop();
            this.top--;
            return _pop
        };
        //返回栈顶元素但是top值不做修改
        Stack.prototype.peek = function() {
            return this.dataStore[this.top - 1]
        };
        //返回当前栈存储的元素个数
        Stack.prototype.length = function() {
            return this.top
        }
        //清空栈
        Stack.prototype.clear = function() {
            this.dataStore = [];
            this.top = 0;
        }
    

    使用举例

    要计算一个阶乘5!

    function fact(n) {
        if(n === 0){
             return 1;
        } else {
             return n * fact(n-1)
        }
    }
    

    利用栈的方式,将数字推入栈,然后一个一个取出

    function fact(n) {
        var stack = new Stack();
        while (n > 1) {
            stack.push(n--)
        }
        var product = 1;
        while (stack.length() > 0) {
            product *= stack.pop();
        }
        return product;
    }
    

    相关文章

      网友评论

          本文标题:JavaScript描述数据结构与算法 -- 栈

          本文链接:https://www.haomeiwen.com/subject/hmrcyxtx.html