您的位置:首页 > 理论基础 > 数据结构算法

javascript数据结构与算法--栈

2017-02-02 15:28 344 查看

引言

栈是遵循后进先出(LIFO)的数据存储结构。当然js中的栈也是建立在array基础上的,对array不熟悉的伙伴可以看一下我写的关于arry的博文《javascript基础–array》

1.栈的创建

function Stack(){//声明一个Stack类
var items = [];//数组存储栈内容
//push方法用于向栈顶推入新元素
this.push = function(element){
items.push(element);
//pop方法用于弹出栈顶元素
this.pop = function(){
return items.pop();
};
//peek方法用于返回栈顶元素,栈内容不改变
this.peek = function(){
return items[items.length - 1];
};
//isEmpty方法用于检验栈是否为空
this.isEmpty = function(){
return items.length == 0;
};
//size返回栈的长度
this.size = function(){
return items.length;
};
//clear清除栈所有内容
this.clear = function(){
items = [];
};
//print打印栈所有内容
this.print = function(){
console.log(items.toString());
};
}


2.栈的使用

var stack = new Stack();
console.log(stack.isEmpty());//true
stack.push(5);
stack.push(8);
console.log(stack.peek());//8
stack.push(11);
console.log(stack.size());//3
console.log(stack.isEmpty());//false
stack.push(15);
stack.pop();
stack.pop();
console.log(stack.size());//2
stack.print();//[5,8]


3.栈的算法实例

十进制转二进制:

function divideBy2(decNumber){
var remStack = new Stack(),//存储余数
rem,//每次整除后的余数
binaryString = '';//最后将返回的二进制字符串
while(decNumber > 0){
rem = Math.floor(decNumber % 2);
remStack.push(rem);
decNumber = Math.floor(decNumber / 2);
}
while(!remStack.isEmpty()){
binaryString += remStack.pop().toString();
}
return binaryString;
}


推演:十进制转换为任意进制

function baseConverter(decNumber,base){
var remStack = new Stack(),//存储余数
rem,//每次整除后的余数
baseString = '';//最后将返回的进制字符串
digits = '0123456789ABCDEF';//超过10变为A
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;
}


结束语

这是关于学习javascript数据结构和算法的学习总结,相当于把书变薄的一个过程吧!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息