棧是一種遵循後進先出(LIFO)的數據結構,其總共就兩個主要的操做,分別是push和pop。前端
看上面這張圖能夠大體的知道,棧的幾個特色:算法
初始化:數據結構
push操做:數據結構和算法
pop操做:學習
經過上面的幾個特色,來看一看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