棧是一種聽從後進先出(LIFO)原則的有序集合。新添加的或者待刪除的元素都保存在棧的末尾。稱做棧頂,另外一端就叫棧底。在棧裏,新元素都靠近棧頂,舊元素都接近棧底。vue
function Stack(){ var items = []; }
接下來,是棧的方法:git
push(element) -- 添加新元素到棧頂。this
pop() -- 移除棧頂的元素,同時返回被移除的元素。code
peek() -- 返回棧頂的元素,但不對棧作任何操做。ip
isEmpty() -- 若是棧裏沒有任何元素就返回true,不然返回false。element
clear() -- 移除棧裏的全部元素。rem
size() -- 返回棧裏的元素個數。get
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]; } this.isEmpty = function(){ return items.length == 0; } this.size = function(){ return items.length; } this.clear = function(){ items = []; } this.print = function(){ console.log(items.toString()); } }
如何將十進制與其餘進制進行轉換,能夠用stack來解決這個問題。
好比要把十進制轉化成二進制,能夠將十進制數字和2相除,直到結果是0爲止。it
function baseConverter(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()]; } return baseString; } console.log(baseConverter(100345,2)); console.log(baseConverter(100345,8)); console.log(baseConverter(100345,16));
參考書籍:Learning Javascript Data Structures and Algorithmsio
推薦一個找vue,angular組件的輪子工廠