栈实现
受限的线性结构,后进先出,LIFO后进先出,从末尾插入元素,为进栈,从末尾删除元素,为出栈
栈应用:
函数调用栈:A调用B,B调用C,C调用D,就是一个函数调用栈,递归就会出现栈溢出
栈封装:
function Stack() {
//栈的属性
this.items = []
//栈的相关操作
//1.将元素压入栈
Stack.prototype.push = function(element) {
this.items.push(element);
}
//2.从栈中取出元素
Stack.prototype.pop = function() {
this.items.pop();
}
//3.查看栈顶元素
Stack.prototype.peek = function() {
return this.items[this.items.length-1]
}
//4.判断栈是否是空
Stack.prototype.isEmpty = function() {
return this.items.length == 0;
}
//5.获取栈中元素个数
Stack.prototype.size = function() {
return this.items.length;
}
//6.toString方法
Stack.prototype.toString = function() {
var resultString = '';
for(var i = 0; i<this.items.length; i++){
resultString += this.items[i]+ ' ';
}
}
}
实际应用:
//十进制to二进制
function dec2bin(decNumber) {
//1.定义一个栈对象
var stack = new Stack();
//2.循环操作
while(decNumber > 0){
//2.1获取余数,放入栈中
stack.push(decNumber%2);
//2.2获取整除后的结果,用于下一次运算
decNumber = Math.floor(decNumber/2);
}
//3.从栈中取出值
var binargString = '';
while(!stack.isEmpty()){
binargString += stack.pop()
}
return binargString;
}
//测试
alert(dec2bin(10))
alert(dec2bin(20))
alert(dec2bin(18))