7 栈结构 十进制转二进制


    class Stack{
      constructor(){
        this.items = [];
      }

      isEmpty(element){
       return element.length === 0 ? true: false;
      }
    }
    const stack = new Stack();
    var bin = [], bin2 = '';
    function decimal2bin(dec){
      while(dec > 1){
        bin.push(dec % 2);
        dec = Math.floor(dec / 2);
      }
      bin.push(dec);   
      while(!stack.isEmpty(bin)){
        bin2 += (bin.pop());
      }
      alert(bin2);
      alert(bin);
    }
    decimal2bin(13);
  

学习成果:

1. 类的创建

class 类名{
    constructor(){
        //类中的数据
    }
    //不加逗号
    
    //定义类中方法
    方法名(形参){
        return ...
    }
}

2.类的使用

cosnt 创建的子类 = new 类名();

3. 将数组以字符串(无逗号间隔)显示:

var str = '';
str += string.pop();

4. Math.floor(数字); 向下取整

5. 求余%

补充

补充:栈(Stack)是一种**后进先出(LIFO)**的线性表,仅允许在栈顶进行入栈(push)与出栈(pop),时间复杂度均为 O(1)。栈的典型应用:

  • 函数调用栈:保存执行上下文;
  • 浏览器前进/后退、撤销/重做;
  • 括号匹配、表达式求值、十进制转二进制等;
  • DFS 递归实现、单调栈(下一个更大元素)。

十进制转二进制的思路:除 2 取余,把余数依次压栈,再依次出栈即得二进制位(低位先入栈,高位先出栈)。

function decimalToBinary(dec) {
  const stack = [];
  while (dec >= 1) {
    stack.push(dec % 2);
    dec = Math.floor(dec / 2);
  }
  let bin = '';
  while (stack.length) bin += stack.pop();
  return bin || '0';
}
console.log(decimalToBinary(13)); // "1101"

来源整理自:我的有道云笔记