js數(shù)據(jù)結(jié)構(gòu)-棧

棧是一種遵循后進(jìn)先出(LIFO)的數(shù)據(jù)結(jié)構(gòu),其總共就兩個(gè)主要的操作,分別是push和pop。

屏幕快照 2018-12-28 下午2.54.16.png

看上面這張圖可以大致的知道,棧的幾個(gè)特點(diǎn):

  • 初始化:

    • 有一塊連續(xù)的存儲(chǔ)空間
    • 棧頂
    • 棧的長(zhǎng)度
  • push操作:

    • 向棧中添加新的元素
    • 棧頂向后挪動(dòng)一個(gè)位置,指向最新的數(shù)據(jù)地址
    • 如果棧滿了繼續(xù)push的化,會(huì)拋出overflow的錯(cuò)誤
  • pop操作:

    • 返回棧頂數(shù)據(jù)
    • 棧頂向前挪動(dòng)一個(gè)位置,指向前一個(gè)數(shù)據(jù)地址
    • 如果棧中沒有數(shù)據(jù)繼續(xù)pop的話,會(huì)拋出underflow的錯(cuò)誤

通過上面的幾個(gè)特點(diǎn),來看一看js如何用代碼實(shí)現(xiàn)一個(gè)棧

    class Stack {
       /**
        * 初始化
        */
        constructor(max = 100) {
            // 存儲(chǔ)空間
            this.data = new Array(max);
            // 棧在最初是化的時(shí)候里面沒有任何數(shù)據(jù),所以棧頂指向-1
            this.top = -1;
            // 棧空間的大小
            this.max = max;
        }
        
       /**
        * push操作
        */
        push(x) {
            if(this.top === this.max - 1){
                throw 'overflow';
            }
            // push一個(gè)新的數(shù)據(jù),棧頂?shù)闹赶蛞餐瑫r(shí)像后挪動(dòng)一位,指向最新的數(shù)據(jù)地址
            this.top++;
            // 將新的數(shù)據(jù)添加進(jìn)棧
            this.data[this.top] = x;
        }
        
       /**
        * pop操作
        */
        pop() {
            if(this.top === -1){
                throw 'underflow'
            }
            // 獲得棧頂數(shù)據(jù)
            const x = this.data[this.top];
            this.top--;
            return x;
        }
        
       /**
        * 獲取棧的長(zhǎng)度
        */
        get length(){
            return this.top + 1
        }
    }

通過上面的代碼演示,對(duì)于棧應(yīng)該會(huì)有一個(gè)大致的了解,后面會(huì)繼續(xù)介紹其他的數(shù)據(jù)結(jié)構(gòu),并且可能會(huì)介紹如何使用棧來實(shí)現(xiàn)其他的數(shù)據(jù)結(jié)構(gòu),以及數(shù)據(jù)結(jié)構(gòu)的一些應(yīng)用。
學(xué)習(xí)前端的同學(xué)可能對(duì)于數(shù)據(jù)結(jié)構(gòu)和算法復(fù)雜度相對(duì)于其他語(yǔ)言的工程師會(huì)稍弱一些,但是這些對(duì)于一個(gè)向深入學(xué)習(xí)前端的來說還是非常重要。

最后如果文章有講錯(cuò)或講的不對(duì)的地方,請(qǐng)大家留言更正哈。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容