摘要:棧學習數據結構與算法讀書筆記。棧又名堆棧,是一種遵循后進先出原則的有序集合。新添加或待刪除的元素都保存在棧的末尾,稱作棧頂,另一端稱作棧底。在棧里,新元素都靠近棧頂,舊元素都接近棧底。
棧
《學習JavaScript數據結構與算法》讀書筆記。
棧(stack)又名堆棧,是一種遵循后進先出(LIFO)原則的有序集合。新添加或待刪除的元素都保存在棧的末尾,稱作棧頂,另一端稱作棧底。在棧里,新元素都靠近棧頂,舊元素都接近棧底。
就好比:一個死胡同,前面是“此路不通”,只有一個入口,如果一隊人進入,只能隊尾變對首出去。
JS實現棧代碼(摘自《學習JavaScript數據結構與算法》):
function Stack() { /** * 用數組來模擬棧 */ var items = []; /** * 將元素送入棧,放置于數組的最后一位 */ this.push = function(element) { items.push(element); }; /** * 彈出棧頂元素 */ this.pop = function() { return items.pop(); }; /** * 查看棧頂元素 */ this.peek = function() { return items[items.length - 1]; } /** * 確定棧是否為空 * @return {Boolean} 若棧為空則返回true,不為空則返回false */ this.isAmpty = function() { return items.length === 0 }; /** * 清空棧中所有內容 */ this.clear = function() { items = []; }; /** * 返回棧的長度 * @return {Number} 棧的長度 */ this.size = function() { return items.length; }; /** * 以字符串顯示棧中所有內容 */ this.print = function() { console.log(items.toString()); }; }
我們可以利用棧來解決十進制的轉換問題,例如我們將十進制數字轉為二進制,是將十進制數字不斷地和2整除取余,直到整除為0。
十進制轉任何進制代碼(摘自《學習JavaScript數據結構與算法》):
/** * decNumber 要轉換的十進制數字 * base 目標進制基數 */ function baseConverter(decNumber, base) { var remStack = new Stack(), rem, baseString = "", digits = "0123456789ABCDEF"; white (decNumber > 0) { rem = Math.floor(decNumber % base); remStack.push(rem); decNumber = Math.floor(decNumber / base); } white(!remStack.isEmpty()) { baseString += digits[remStack.pop()]; } return baseString; }JS 基本數組操作速查
方法 | 描述 |
---|---|
concat() | 連接兩個或更多的數組,并返回結果。 |
join() | 把數組的所有元素放入一個字符串。元素通過指定的分隔符進行分隔。 |
pop() | 刪除并返回數組的最后一個元素。 |
push() | 向數組的末尾添加一個或更多元素,并返回新的長度。 |
reverse() | 顛倒數組中元素的順序。 |
shift() | 刪除并返回數組的第一個元素。 |
slice() | 從某個已有的數組返回選定的元素。 |
sort() | 對數組的元素進行排序。 |
splice() | 刪除元素,并向數組添加新元素。可用于插入、替換 |
toSource() | 返回該對象的源代碼。 |
toLocaleString() | 把數組轉換為本地字符串,并返回結果。 |
ushift() | 向數組的開頭添加一個或更多元素,并返回新的長度。 |
valueOf() | 返回數組對象的原始值。 |
附:
JavaScript數據結構和算法系列:
JS 隊列-優先隊列、循環隊列
JavaScript設計模式系列:
JavaScript設計模式之策略模式
JavaScript設計模式之發布-訂閱模式(觀察者模式)-Part1
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/90882.html
摘要:錯誤堆棧包含了產生該錯誤時完整的調用棧信息。總結通過本文的描述,相信你對中的調用棧對象錯誤堆棧有了清晰的認識,在遇到錯誤的時候不在慌亂。 本文首發知乎專欄:《前端周刊》。全文共 6988 字,讀完需 10 分鐘,速讀需 3 分鐘。通過剖析 JS 中調用棧的工作機制,講解錯誤拋出、處理的正確姿勢,以及錯誤堆棧的獲取、清理處理方法,希望大家對這個少有人關注但極其有用的知識點能夠有所理解和掌...
摘要:調用棧的運行機制機制程序運行到一個函數,它就會將其添加到調用棧中,當從這個函數返回的時候,就會將這個函數從調用棧中刪掉。在調用棧中每個調用偵都對應一個函數,最上方的調用幀稱為當前幀,調用棧是由所有的調用偵形成的。 showImg(https://segmentfault.com/img/remote/1460000019244497?w=900&h=600); 調用棧的英文名叫做Cal...
摘要:在調用棧中每個調用偵都對應一個函數,最上方的調用幀稱為當前幀,調用棧是由所有的調用偵形成的。我們應該在日常的中,有意識的使用的尾調用優化,來減少調用棧的長度,節省客戶端內存。調用棧的英文名叫做Call Stack,大家或多或少是有聽過的,但是對于js調用棧的工作方式以及如何在工作中利用這一特性,大部分人可能沒有進行過更深入的研究,這塊內容可以說對我們前端來說就是所謂的基礎知識,咋一看好像用處...
摘要:事件循環當主線程中的任務執行完畢后,會從任務隊列中獲取任務一個個的放在棧中執行去執行,這個過程是循環不斷的,所以整個的這種運行機制又稱為事件循環。 寫在前面 說起javascript(以下簡稱js)這門語言,相信大家已經非常熟悉了,不管是前端開發還是后端開發幾乎無時無刻都要跟它打交道。雖說開發者每天幾乎都要操作js,但是你真的確定你掌握了js的運行機制嗎!下面我們就來聊聊這話題。 Ja...
摘要:對于棧來說,這個表尾稱為棧的棧頂,相應的表頭稱為棧底。棧和隊列的區別棧的插入和刪除操作都是在一端進行的,而隊列的操作卻是在兩端進行的。出棧操作出棧操作就是在棧頂取出數據,棧頂指針隨之下移的操作。 基本概念 棧和隊列都是動態的集合,在棧中,可以去掉的元素是最近插入的哪一個。棧實現了后進先出。在隊列中,可以去掉的元素總是在集合中存在的時間最長的那一個。隊列實現了先進先出的策略。 棧的官...
閱讀 2655·2023-04-26 02:44
閱讀 8253·2021-11-22 14:44
閱讀 2119·2021-09-27 13:36
閱讀 2463·2021-09-08 10:43
閱讀 677·2019-08-30 15:56
閱讀 1392·2019-08-30 15:55
閱讀 2887·2019-08-28 18:12
閱讀 2826·2019-08-26 13:50