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>

 

posted @ 2017-11-07 18:39  逗比煎饼侠  阅读(187)  评论(0编辑  收藏  举报