js数据结构--栈
<!DOCTYPE html> <html> <head> <title></title> </head> <body> <script type="text/javascript"> 1.栈(LIFO):先进后出 2.创建一个类表示栈 function Stack(){ //各种属性和方法的声明 } 3.需要一种数据结构来保存栈里的元素,选择数组 var items=[]; 4.为栈声明一些方法 push(elements):添加一个或几个新元素到栈顶 pop():移除栈顶的元素,并返回被移除的元素 peek():返回栈顶的元素 isEmpty():如果栈里没有任何元素返回true,否则返回false clear():移除栈里所有的元素 size():返回栈里元素的个数 5.实现push方法 this.push=function(elements){ items.push(elements); } 6.实现pop方法 this.pop=function(){ return items.pop(); } 7.实现peek方法 this.peek=function(){ return items[items.length-1] } 8.实现isEmpty方法 this.isEmpty=function(){ return items.length==0; } 9.实现size方法 this.size=function(){ return items.length; } 10.实现clear方法 this.clear=function(){ items=[]; } 11.栈的全部代码 function Stack(){ var items=[]; this.push=function(elements){ items.push(elements); }; this.pop=function(){ return items.pop(); }; this.peek=function(){ return items[items.length-1]; }; this.isEmpty=function(){ return items.length==0; }; this.size=function(){ return items.length; }; this.clear=function(){ items=[]; }; } ----------------------------------------------- 使用Stack类 1.初始化Stack类,用isEmpty方法判断栈里是否为空 var stack=new Stack(); console.log(stack.isEmpty()); //true 2.往栈里添加元素(可以添加任何类型的元素) stack.push(5); stack.push(8); 3.使用peek方法,返回栈顶的元素 console.log(stack.peek()); //8 4.再添加一个元素 stack.push(11); console.log(stack.size()); //3 console.log(stack.isEmpty()); //返回false 5.再添加一个元素 stack.push(15); stack.pop(); stack.pop(); console.log(stack.size()); //2 ----------------------------------------------- 栈的应用:十进制转二进制 function devideBy2(decNumber){ var remStack=new Stack(),rem,binaryString=''; while(remStack.size()>0){ rem=Math.floor(decNumber%2); remStack.push(rem); decNumber=Math.floor(decNumber/2); } while(!decNumber(isEmpty())){ binaryString+=remStack.pop().toString(); } return binaryString; } 测试: console.log(devideBy2(10)); //1010 console.log(devideBy2(233)); //11101001 </script> </body> </html>