js实现一个栈结构

111 阅读1分钟
  class Stack { // 用数组的方式
        constructor() {
          this.items = [];
        }
        push(ele) {
          this.items.push(ele);
        };
        pop() {
          return this.items.pop();
        };
        peek() {
         return this.items[this.items.length-1];
        };
        isEmpty() {
          return this.items.length === 0;
        };
        clear() {
          this.items = [];
        };
        size() {
          return this.items.length;
        };
      }
   
 class Stack {  // 用对象的方式
        constructor() {
          this.items = {};
          this.count = 0;
        }
        push(ele) {
          this.items[this.count] = ele;
          this.count++;
        }
        size() {
          return this.count;
        }
        isEmpty() {
          return this.count === 0;
        }
        pop() {
          if (this.isEmpty()) {
            return undefined
          }
          this.count--;
          const result = this.items[this.count];
          delete this.items[this.count];
          return result
        }
        peek() {
          if (this.isEmpty()) {
            return undefined
          }
          return this.items[this.count - 1];
        }
        clear() {
          this.items = {};
          this.count = 0;
        }
        toString() {
          if (this.isEmpty()) {
            return ''
          }
          let str = `${this.items[0]}`;
          for(let i = 1; i < this.count; i++) {
            str = `${str},${this.items[i]}`
          }
          return str;
        }
      }
      
      
    // 实现一个十进制转二进制方法
    function decimalToBinary(num) { // 将十进制转为二进制
        let stack = new Stack();
        let binarystr = '';
        let number = num;
        let rem;
        while(number > 0) {
          rem = Math.floor(number%2);
          stack.push(rem);
          number = Math.floor(number/2);
        }
        while(!stack.isEmpty()) {
          binarystr += stack.pop().toString();
        }
        return binarystr
      }
      
   // 实现一个十进制转2-36进制的方法
   
   function decimalToBinary2(num, base) {
        let stack = new Stack();
        let binarystr = '';
        let number = num;
        let digits = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ';
        let rem;
        if (!(base >= 2 && base < 36)) {
          return '';
        }
        while(number > 0) {
          rem = Math.floor(number%base);
          stack.push(rem);
          number = Math.floor(number/base);
        }
        while(!stack.isEmpty()) {
          binarystr += digits[stack.pop()]
        }
        return binarystr
      }