核心提示:引言 栈是遵循后进先出(LIFO)的数据存储结构。当然js中的栈也是建立在array基础上的,对array不熟悉的伙伴可以看一下我写的关于arry的博文《array》1.栈的创建function St...
引言
栈是遵循后进先出(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 pideBy2(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数据结构和算法的学习总结,相当于把书变薄的一个过程吧!