记录自己的学习
栈(stack)又名堆栈,它是一种运算受限的线性表。其限制是仅允许在表的一端进行插入和删除运算。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。
function Stack(){ this.data = []; this.push = push; //添一个或多个元素到栈顶 this.pop = pop; //移除栈顶的元素,同时返回被移除的元素 this.peek = peek; //返回被移除的元素 this.isEmpty = isEmpty; //判断栈是否为空,空返回true,否则返回false this.clear =clear; //移除栈里的所有元素 this.size = size; //返回栈内元素的个数 }; function push(ele){ this.data.push(ele); }; function pop(){ return this.data.pop(); //利用数组的pop()方法来达到移除栈顶的元素,同时返回被移除的元素 }; function peek(){ return this.data[this.data.length-1] }; function isEmpty(){ return this.data.length == 0; }; function size(){ return this.data.length; }; function clear(){ this.data = []; }; var sta = new Stack(); sta.push('lily'); sta.push('Tom') console.log(sta.data) //['lily', 'Tom'] var peeka = sta.peek(); console.log(peeka) //Tom var popa = sta.pop(); console.log(popa) //Tom console.log(sta.data) //lily
运用上面实现的stack,实现进制转化
//进制转换 10进制转化2进制,8进制,16进制 function baseConverter(number, base){ var remStack = new Stack(), rem, baseString = '', digits = '0123456789ABCDEF'; while(number > 0){ rem = number % base; remStack.push(rem); number = parseInt(number / base) } while(!remStack.isEmpty()){ baseString += digits[remStack.pop()]; } return baseString; } var a = baseConverter(15, 16) console.log(a) //F