记录自己的学习

栈(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