《JavaScript数据结构与算法》笔记——第3章 栈

发布时间:2019-08-09 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了《JavaScript数据结构与算法》笔记——第3章 栈脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
  • 栈是一种后进先出(LIFO)的有序集合
  • 函数创建栈
function Stack() {
    // 各种属性和方法的声明
    ITem = [];// 需要一种数据结构来保存栈里的元素
    // 为栈声明一些方法
    /**
     * 添加一个或者几个新元素到栈顶
     * @param element
     */
    this.push = function (element) {
        item.push(element)
    };
    /**
     * 移出栈顶的元素,同时返回被移出的元素
     * @returns {*}
     */
    this.pop = function () {
        return item.pop()
    };
    /**
     * 返回栈顶的元素,不对栈做任何修改
     * @returns {*}
     */
    this.PEek = function () {
        return item[item.length - 1]
    };
    /**
     * 如果栈里没有任何元素就返回true,否则返回false
     * @returns {boolean}
     */
    this.iSEMpty = function () {
        return item.length === 0
    };
    /**
     * 移出栈里的所有元素
     */
    this.clear = function () {
        item = []
    };
    /**
     * 返回栈里的元素个数
     * @returns {Array|number}
     */
    this.size = function () {
        return item.length
    }
}
  • ES6语法声明
class Stack {
    constructor() {
        this.items = [];
    }
    push(element) {
        this.items.push(element)
    }
    // 其他方法
}
/**
 * 由于根据原型实现,无法创建私有属性
 */
/**
 * 改进1
 * 使用ES6新增类型Symbol,基本类型,通常不可改变
 *
 * ES6中Object.getOwnPRopertySymbol()方法能够获取到类里面声明的所有Symbol属性,通过这个可以操作其他数组方法
 */
let _items = Symbol();
class Stack {
    constructor() {
        this[_items] = [];
    }
    // Stack方法
    push(element) {
        this[_items].push(element)
    }
}
let demo = new Stack();
let objSymbols = Object.getOwnPropertySymbols(demo);
demo[objSymbols[0]].pop();// 可以访问未暴露的数组方法
/**
 * 改进2
 * 使用WeakMaP实现类(ES6新的集合类型,存储键值对,避开对数组方法的直接访问)
 */
let Stack = (function () {// 闭包使得外部无法访问WeekMap,达到私有目的,并且不会暴露其他未暴露的数组方法
    const items = new WeakMap();
    class InnerStack {
        constructor() {
            items.set(this, [])
        }
        push(element) {
            items.get(this).push(element)
        }
        pop() {
            return items.get(this).pop()
        }
        print() {
            return items.get(this).toString()
        }
    }
    return InnerStack
})();
// 改进2 的方法使得子类无法继承私有属性
  • 栈的应用:十进制转二进制

脚本宝典总结

以上是脚本宝典为你收集整理的《JavaScript数据结构与算法》笔记——第3章 栈全部内容,希望文章能够帮你解决《JavaScript数据结构与算法》笔记——第3章 栈所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。