• JavaScript数据结构和算法----栈


    前言 

      栈是一种遵循后进先出(LIFO)原则的有序集合,新添加的或待删除的元素都保存在栈的末尾,称作栈顶,另外一端就叫栈底。在栈里,新元素都靠近栈顶,旧元素都接近栈底。可以想象桌上的一叠书,或者厨房里的堆放的盘子。

    一、栈的创建

    可以创建一个类来表示栈

    //1、创建一种数据结构来保存栈里面的数据,这里选择数组
    //2、声明一些栈的方法
        // push(element(s)) : 添加一个或一些元素到栈顶
        // pop() : 移除栈顶的元素,同时返回被移除的元素。
        // peek() : 返回栈顶的元素,仅仅是返回,不做任何修改。
        // isEmpty() : 如果栈里面没有任何元素就返回true,否者为false。
        // clear() : 清除栈里面的元素。
        // size() : 返回栈里面的个数。
    function Stack(){
        
        var items = [];
    
        this.push = function(element){
            items.push(element);
        }
    
        this.pop = function(){
            return items.pop();
        }
    
        this.peek = function(){
            return items[items.length-1];
        }
    
        this.isEmpty = function(){
            return items.length == 0;
        }
    
        this.clear = function(){
            items = [];
        }
    
        this.size = function(){
            return items.length;
        }
    
        this.print = function(){
            console.log(items.toString());
        }
    
        
    }
    
    
    //使用栈
    
    var stack = new Stack();
    
    console.log(stack.isEmpty());//true
    
    stack.push(100);
    
    stack.push(200);
    
    console.log(stack.isEmpty());//false
    
    console.log(stack.size());//2
    
    console.log(stack.peek());
    
    stack.pop();
    
    stack.print();//100
    

    二、栈的应用

    十进制转二进制

    //算法描述:将该十进制的数和2整除,或者每次的余数(0或1),直到结果为0位置。比图10的二进制为:
        // 10/2 = 5 ,余数 0 
        // 5/2 = 2  ,余数 1
        // 2/2 = 1  ,余数 0
        // 1/2 = 0  ,余数 1
        // 10的二进制表示为:0101
     
    function diviceBy2(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;
    }
    console.log(diviceBy2(10));   //1010
    console.log(diviceBy2(520));  //1000001000
    console.log(diviceBy2(1000)); //1111101000
    

     

    十进制转成其他进制

    function diviceByBase(decNumber, base){
    
        var remStack = new Stack(),
            rem,
            baseString = '',
            digits = '0123456789ABCDEF';//8进制是余数是(0-7)16进制是(0-9A-F)
    
        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;
    }
    
    console.log(diviceByBase(100345, 2));  // 11000011111111001
    console.log(diviceByBase(100345, 8));  // 303771
    console.log(diviceByBase(100345, 16)); // 187F9
    

      

      

      

  • 相关阅读:
    js表单提交回调函数
    sublime text3下BracketHighlighter的配置方法
    不同版本的jquery的复选框checkbox的相关问题
    jquery键盘常见事件
    jQuery学习笔记(一)
    sublime text按esc经常进入command mode(不能输入任何东西)
    sublime text光标移入移出括号的快捷键设置
    sublime text3 自己定义的不同浏览器的预览快捷键
    grains和pillar的联合使用
    自定义模块和grains
  • 原文地址:https://www.cnblogs.com/leaf930814/p/7224232.html
Copyright © 2020-2023  润新知