栈是一种听从后进先出(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组件的轮子工厂