js數據結構-棧

棧是一種遵循後進先出(LIFO)的數據結構,其總共就兩個主要的操做,分別是push和pop。前端

圖片描述

看上面這張圖能夠大體的知道,棧的幾個特色:算法

  • 初始化:數據結構

    • 有一塊連續的存儲空間
    • 棧頂
    • 棧的長度
  • push操做:數據結構和算法

    • 向棧中添加新的元素
    • 棧頂向後挪動一個位置,指向最新的數據地址
    • 若是棧滿了繼續push的化,會拋出overflow的錯誤
  • pop操做:學習

    • 返回棧頂數據
    • 棧頂向前挪動一個位置,指向前一個數據地址
    • 若是棧中沒有數據繼續pop的話,會拋出underflow的錯誤

經過上面的幾個特色,來看一看js如何用代碼實現一個棧this

class Stack {
       /**
        * 初始化
        */
        constructor(max = 100) {
            // 存儲空間
            this.data = new Array(max);
            // 棧在最初是化的時候裏面沒有任何數據,因此棧頂指向-1
            this.top = -1;
            // 棧空間的大小
            this.max = max;
        }
        
       /**
        * push操做
        */
        push(x) {
            if(this.top === this.max - 1){
                throw 'overflow';
            }
            // push一個新的數據,棧頂的指向也同時像後挪動一位,指向最新的數據地址
            this.top++;
            // 將新的數據添加進棧
            this.data[this.top] = x;
        }
        
       /**
        * pop操做
        */
        pop() {
            if(this.top === -1){
                throw 'underflow'
            }
            // 得到棧頂數據
            const x = this.data[this.top];
            this.top--;
            return x;
        }
        
       /**
        * 獲取棧的長度
        */
        get length(){
            return this.top + 1
        }
    }

經過上面的代碼演示,對於棧應該會有一個大體的瞭解,後面會繼續介紹其餘的數據結構,而且可能會介紹如何使用棧來實現其餘的數據結構,以及數據結構的一些應用。
學習前端的同窗可能對於數據結構和算法複雜度相對於其餘語言的工程師會稍弱一些,可是這些對於一個向深刻學習前端的來講仍是很是重要。spa

最後若是文章有講錯或講的不對的地方,請你們留言更正哈。code

相關文章
相關標籤/搜索