摘要:棧棧是一種遵循后進先出的數據結構,其總共就兩個主要的操作,分別是和。學習前端的同學可能對于數據結構和算法復雜度相對于其他語言的工程師會稍弱一些,但是這些對于一個向深入學習前端的來說還是非常重要。
棧
棧是一種遵循后進先出(LIFO)的數據結構,其總共就兩個主要的操作,分別是push和pop。
看上面這張圖可以大致的知道,棧的幾個特點:
初始化:
有一塊連續的存儲空間
棧頂
棧的長度
push操作:
向棧中添加新的元素
棧頂向后挪動一個位置,指向最新的數據地址
如果棧滿了繼續push的化,會拋出overflow的錯誤
pop操作:
返回棧頂數據
棧頂向前挪動一個位置,指向前一個數據地址
如果棧中沒有數據繼續pop的話,會拋出underflow的錯誤
通過上面的幾個特點,來看一看js如何用代碼實現一個棧
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 } }
通過上面的代碼演示,對于棧應該會有一個大致的了解,后面會繼續介紹其他的數據結構,并且可能會介紹如何使用棧來實現其他的數據結構,以及數據結構的一些應用。
學習前端的同學可能對于數據結構和算法復雜度相對于其他語言的工程師會稍弱一些,但是這些對于一個向深入學習前端的來說還是非常重要。
最后如果文章有講錯或講的不對的地方,請大家留言更正哈。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/100515.html
摘要:調用棧的運行機制機制程序運行到一個函數,它就會將其添加到調用棧中,當從這個函數返回的時候,就會將這個函數從調用棧中刪掉。在調用棧中每個調用偵都對應一個函數,最上方的調用幀稱為當前幀,調用棧是由所有的調用偵形成的。 showImg(https://segmentfault.com/img/remote/1460000019244497?w=900&h=600); 調用棧的英文名叫做Cal...
摘要:對于棧來說,這個表尾稱為棧的棧頂,相應的表頭稱為棧底。棧和隊列的區別棧的插入和刪除操作都是在一端進行的,而隊列的操作卻是在兩端進行的。出棧操作出棧操作就是在棧頂取出數據,棧頂指針隨之下移的操作。 基本概念 棧和隊列都是動態的集合,在棧中,可以去掉的元素是最近插入的哪一個。棧實現了后進先出。在隊列中,可以去掉的元素總是在集合中存在的時間最長的那一個。隊列實現了先進先出的策略。 棧的官...
摘要:在調用棧中每個調用偵都對應一個函數,最上方的調用幀稱為當前幀,調用棧是由所有的調用偵形成的。我們應該在日常的中,有意識的使用的尾調用優化,來減少調用棧的長度,節省客戶端內存。調用棧的英文名叫做Call Stack,大家或多或少是有聽過的,但是對于js調用棧的工作方式以及如何在工作中利用這一特性,大部分人可能沒有進行過更深入的研究,這塊內容可以說對我們前端來說就是所謂的基礎知識,咋一看好像用處...
摘要:錯誤堆棧包含了產生該錯誤時完整的調用棧信息。總結通過本文的描述,相信你對中的調用棧對象錯誤堆棧有了清晰的認識,在遇到錯誤的時候不在慌亂。 本文首發知乎專欄:《前端周刊》。全文共 6988 字,讀完需 10 分鐘,速讀需 3 分鐘。通過剖析 JS 中調用棧的工作機制,講解錯誤拋出、處理的正確姿勢,以及錯誤堆棧的獲取、清理處理方法,希望大家對這個少有人關注但極其有用的知識點能夠有所理解和掌...
閱讀 772·2021-10-09 09:58
閱讀 641·2021-08-27 16:24
閱讀 1723·2019-08-30 14:15
閱讀 2384·2019-08-30 11:04
閱讀 2067·2019-08-29 18:43
閱讀 2170·2019-08-29 15:20
閱讀 2716·2019-08-26 12:20
閱讀 1616·2019-08-26 11:44