JS實現(xiàn)棧

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();
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • afinalAfinal是一個android的ioc,orm框架 https://github.com/yangf...
    passiontim閱讀 15,837評論 2 45
  • 使用js實現(xiàn)stack 棧的性質:先進后出,只能在棧頂插入和刪除 /*測試stack的實現(xiàn) */ 之前有道某雷的前...
    edisonchan閱讀 654評論 0 2
  • 大部分的家長都聽過“Terrible two",相信過來人對這個階段也有著很深的體會,不知道大家是如何引導孩子渡過...
    V微涼閱讀 1,190評論 0 0
  • 感覺自己最近幾天又開始負能量爆棚,開始瘋狂的刷劇,什么也不愿意做,沒有力量,內心也煩躁不堪,甚至都找不出是什么原...
    luckchen閱讀 216評論 0 0
  • 瑤池王母灑瓊漿 落入玉盤聞鏗鏘 嘈嘈焉,若二郎馳奔哮天犬 切切焉,似天王撥弄琵琶弦 廣寒嫦娥舞赤練 太白上仙持金丹...
    暗涌0330閱讀 144評論 0 2

友情鏈接更多精彩內容