摘要:實現入棧出棧什么是棧棧是一種遵循后進先出原則的有序集合。新添加的或者待刪除的元素都保存在棧的尾部即棧頂,另一端叫棧底。在棧里,新元素都靠近棧頂,舊元素都接近棧底。實現入棧出棧的方法方法一是創建一個類來表示棧。
JS-實現入棧出棧 1、什么是棧
棧是一種遵循 后進先出(LIFO) 原則的有序集合。新添加的或者待刪除的元素都保存在棧的尾部(即棧頂),另一端叫棧底。在棧里,新元素都靠近棧頂,舊元素都接近棧底。
2、實現入棧出棧的方法方法一是創建一個Stack類來表示棧。具體代碼如下:
function Stack() { var items = []; // 添加一個(或幾個)新元素到棧頂 this.push = function(ele) { items.push(ele); }; // 移除棧頂的元素,同時返回被移除的元素 this.pop = function() { return items.pop(); }; // 返回棧頂的元素,不對棧做任何修改 this.peek = function() { return items[items.length - 1]; }; // 判斷棧里使是否還有元素 this.isEmpty = function() { return items.length == 0; }; // 移除棧里所有的元素 this.clear = function() { items = []; }; // 返回棧里的元素個數 this.size = function() { return items.length; }; this.print = function() { console.log(items.toString()); }; } var stack = new Stack(); console.log(stack.isEmpty()); stack.push(1); stack.push(8); console.log(stack.peek()); stack.push(10); console.log(stack.peek()); console.log(stack.size()); console.log(stack.isEmpty()); console.log(14) stack.pop(); stack.pop(); stack.print();
另一種方式就是通過push將元素推入棧頂,然后遍歷棧里的內容,刪除棧頂元素,因為在棧頂元素被刪除的時候,數組的長度是一直在變化的,所以要先將數組的長度賦值給len,來確保每次刪除的是棧頂元素
function stack2 () { var arr = [] for(let i = 0; i < 5; i ++){ var temp = i + 1; arr.push(temp) console.log(temp + "入棧") console.log(arr) } console.log("arr內容:" + arr) var len = arr.length for(let i = 0; i < len; i++) { console.log("當前棧的長度:" + arr.length) console.log("刪除棧頂元素:" + arr.pop()) } } stack2()3、入棧出棧的實際應用
棧的實際應用之一就是實現十進制轉化為任意進制
以十進制轉化為二進制為例:要把十進制轉化成二進制,我們可以將十進制數字和2整除(二進制是蠻二進一),直到結果是0為止。其轉化過程大致如下:
// 將十進制轉為任意進制 function baseConerter(decNumber, base){ var remStack = new Stack(), rem, baseString = "", digits = "0123456789ABCDEF" while (decNumber > 0) { rem = Math.floor(decNumber % base) remStack.push(rem) decNumber = Math.floor(decNumber / base) } while (!remStack.isEmpty()){ baseString += digits[remStack.pop()] } console.log("baseString:" + baseString) return baseString } baseConerter(223411, 2) // 110110100010110011 baseConerter(223411, 8) // 664263 baseConerter(223411, 16) // 368B3
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/107553.html
摘要:在改進前使用數組的一個缺點是必須聲明數組的大小,所以棧有確定的容量。待解決的問題建立一個能夠增長或者縮短到任意大小的棧。下邊的圖是觀察時間開銷的另一種方式,表示了入棧操作需要訪問數組的次數。 前言 上一篇:算法分析下一篇:基本排序 本篇內容主要是棧,隊列 (和包)的基本數據類型和數據結構文章里頭所有的對數函數都是以 2 為底關于性能分析,可能還是需要一些數學知識,有時間可以回一下在很多...
摘要:題目要求通過隊列實現一個棧的功能。棧的為壓入棧頂,出棧,棧頂元素,棧是否為空。重復上述的操作。但是當需要彈出元素時,則從桶彈出。這樣,下次加入的元素必然全部位于桶后的所有元素,而桶中的元素也能保證位輸入順序。極大的減少了不必要的入棧出棧。 題目要求 Implement the following operations of a queue using stacks. push(x) ...
摘要:語法樹這一章主要是完成語法樹的生成。其中由于函數聲明部分過于簡單,沒必要生成語法樹,打算留到下一章一起處理。主循環結束后數據棧中的第一位元素則為語法樹。這是最后生成的語法樹總結總之,語法樹就算是生成完畢了。 前言 這個系列是關于CodeWars上的一條1Kyu題:Simple Interactive Interpreter。也就是實現一個簡單的交互式解釋器。題目地址:http://ww...
摘要:在一個函數中的內容執行前會做一些變量的初始化工作,就是圖中下的內容。輸出完后,函數出棧,函數變為活動狀態,因為沒有返回值,所以仍然為同時執行下一語句,如下圖執行與相同,先是函數入棧,輸出然后將返回值賦給后出棧。 window.onload = function(){ debugger; var variable1,//定義變量1但沒有賦值...
摘要:作用域鏈所謂作用域鏈,是由當前環境與上層環境的一系列變量對象組成,它保證當前執行環境對符合訪問權限的變量和函數的有序訪問。當我們在執行函數的時候,需要的變量,在自己的作用域內找不到,便會順著作用域鏈往上找,直到找到全局作用域。 一 作用域相關? ? ? 作用域是一套規則,用來管理引擎如何查找變量。在es5之前,js只有全局作用域及函數作用域。es6引入了塊級作用域。但是這個塊級別作用域...
閱讀 801·2021-11-24 09:38
閱讀 1001·2021-11-11 11:01
閱讀 3245·2021-10-19 13:22
閱讀 1531·2021-09-22 15:23
閱讀 2835·2021-09-08 09:35
閱讀 2773·2019-08-29 11:31
閱讀 2127·2019-08-26 11:47
閱讀 1569·2019-08-26 11:44