《學習JavaScript數據結構與算法》讀書筆記。javascript
棧(stack)又名堆棧,是一種遵循後進先出(LIFO)原則的有序集合。新添加或待刪除的元素都保存在棧的末尾,稱做棧頂,另外一端稱做棧底。在棧裏,新元素都靠近棧頂,舊元素都接近棧底。java
就比如:一個死衚衕,前面是「此路不通」,只有一個入口,若是一隊人進入,只能隊尾變對首出去。git
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。segmentfault
十進制轉任何進制代碼(摘自《學習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; }
方法 | 描述 |
---|---|
concat() | 鏈接兩個或更多的數組,並返回結果。 |
join() | 把數組的全部元素放入一個字符串。元素經過指定的分隔符進行分隔。 |
pop() | 刪除並返回數組的最後一個元素。 |
push() | 向數組的末尾添加一個或更多元素,並返回新的長度。 |
reverse() | 顛倒數組中元素的順序。 |
shift() | 刪除並返回數組的第一個元素。 |
slice() | 從某個已有的數組返回選定的元素。 |
sort() | 對數組的元素進行排序。 |
splice() | 刪除元素,並向數組添加新元素。可用於插入、替換 |
toSource() | 返回該對象的源代碼。 |
toLocaleString() | 把數組轉換爲本地字符串,並返回結果。 |
ushift() | 向數組的開頭添加一個或更多元素,並返回新的長度。 |
valueOf() | 返回數組對象的原始值。 |
附:
JavaScript數據結構和算法系列:
JS 隊列-優先隊列、循環隊列數組
JavaScript設計模式系列:
JavaScript設計模式之策略模式
JavaScript設計模式之發佈-訂閱模式(觀察者模式)-Part1數據結構