JS实现栈

GitHub: https://github.com/BadWaka/data-structure-algorithm/blob/master/stack/stack.html

    // 栈

    var Stack = function (size) {

        this.stack = new Array(size);   // 新建内存空间
        this.size = size;   // 栈容量
        this.top = 0;   // 栈顶

        var that = this;

        // 判断栈是否为空
        this.isStackEmpty = function () {
            return that.top === 0;
        };

        // 判断栈是否为满
        this.isStackFull = function () {
            return that.top === that.size;
        };

        // 清空一个栈
        this.clearStack = function () {
            that.top = 0;
            // that.stack.splice(0, that.stack.length); // 不是必要的,因为即使栈里有值也没有关系,只要栈顶为0了,之前的值就再也取不到了
        };

        // 获得栈的元素个数
        this.getStackLength = function () {
            return that.top;    // 栈顶的值即可以表示栈元素的多少
        };

        // 入栈
        this.push = function (element) {
            if (that.isStackFull()) {
                console.log('栈已满,入栈失败 element = ' + element);
                return false;
            }
            that.stack[that.top] = element;
            that.top++;
            return true;
        };

        // 出栈
        this.pop = function () {
            if (that.isStackEmpty()) {
                console.log('空栈,出栈失败');
                return false;
            }
            // 这里要注意,栈顶指向的是一个空的地方,用来放元素的;所以取得时候先top--,再取值
            that.top--;
            var element = that.stack[that.top];
            console.log('出栈成功 element = ' + element);
            return element;
        };

        /**
         * 遍历栈
         *
         * @param isFromTop    是否从栈顶开始
         * @param handler   处理函数
         */
        this.traverseStack = function (isFromTop, handler) {
            var stackStr = '';
            var i;
            if (isFromTop) {
                for (i = that.top - 1; i >= 0; i--) {
                    stackStr += that.stack[i] + ' ';
                    if (handler) {
                        handler(that.stack[i]);
                    }
                }
            } else {
                for (i = 0; i < that.top; i++) {
                    stackStr += that.stack[i] + ' ';
                    if (handler) {
                        handler(that.stack[i]);
                    }
                }
            }
            console.log('栈内所有元素为 stackStr = ' + stackStr);
        };
    };

    // 测试case

    var ins = new Stack(5);

    ins.push('h');
    ins.push('e');
    ins.push('l');
    ins.push('l');
    ins.push('o');

    ins.pop();

    //    ins.clearStack();

    console.log('栈是否为空 = ' + ins.isStackEmpty());
    console.log('栈是否为满 = ' + ins.isStackFull());
    console.log('当前栈长度 = ' + ins.getStackLength());
    ins.traverseStack();
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • afinalAfinal是一个android的ioc,orm框架 https://github.com/yangf...
    passiontim阅读 15,617评论 2 45
  • 使用js实现stack 栈的性质:先进后出,只能在栈顶插入和删除 /*测试stack的实现 */ 之前有道某雷的前...
    edisonchan阅读 630评论 0 2
  • 大部分的家长都听过“Terrible two",相信过来人对这个阶段也有着很深的体会,不知道大家是如何引导孩子渡过...
    V微凉阅读 1,177评论 0 0
  • 感觉自己最近几天又开始负能量爆棚,开始疯狂的刷剧,什么也不愿意做,没有力量,内心也烦躁不堪,甚至都找不出是什么原...
    luckchen阅读 175评论 0 0
  • 瑶池王母洒琼浆 落入玉盘闻铿锵 嘈嘈焉,若二郎驰奔哮天犬 切切焉,似天王拨弄琵琶弦 广寒嫦娥舞赤练 太白上仙持金丹...
    暗涌0330阅读 130评论 0 2