栈是最基本的数据结构之一,他的特点是:后进先出

栈的基本功能

  1. 进栈:添加元素到栈顶
  2. 出栈:删除栈顶的元素并返回
  3. 读取栈顶的数据元素
  4. 判断栈是否为空,为空返回true
  5. 计算栈存储数据的大小
  6. 清空栈
  7. 打印栈中的所有元素

代码实现

基本的架构如下所:

function Stack(){
    let item = [];

    /**
     * 添加元素到栈顶
     * @param m 进栈的元素
     */
    this.enStack = function(m){
    }

    /**
     * 出栈,删除栈顶的元素并返回
     */
    this.deStack = function(){
    }

    /**
     * 读取栈顶的元素
     */
    this.peek = function(){
    }

    /**
     * /判断栈是否未为空
     */
    this.isEmpty = function(){
    }

    /**
     * 计算栈的容量
     */
    this.size = function(){
    }

    /**
     * 清空栈
     */
    this.clear = function(){
    }

    /**
     * 打印栈中的所有元素
     */
    this.print = function(){
    }

}
  • this.enStack——进栈操作
    this.enStack = function(m){
        item.push(m);
    }
  • this.deStack——出栈
    this.deStack = function(){
        return item.pop();
    }
  • this.peek 读取栈顶的元素
    this.peek = function(){
        return item[item.length - 1];
    }
  • this.isEmpty 判断栈是否为空
    this.isEmpty = function(){
        return item.length === 0;
    }
  • this.size 计算栈的容量
    this.size = function(){
        return item.length;
    }
  • this.clear 清空栈
    this.clear = function(){
        item = [];
    }
  • this.print 打印栈中的元素
    this.print = function(){
        console.log(item.toString());
    }

栈的实际应用

在进制转化的结果是将余数倒着排列,这时就需要用到栈,先得到的余数放后面,后得到的余数放前面,具体实现过程

十进制转化为二进制

十进制转化为二进制的计算方式:除2取余法
图片描述

代码实现过程:

function transformTo(decNumber){
  let remStack = new Stack();
  let rem = '';
  let remString = '';

  while(decNumber){
      rem = decNumber % 2;
      remStack.enStack(rem);
      decNumber = parseInt(decNumber / 2);
  }

  while(!remStack.isEmpty()){
      remString += remStack.deStack().toString();
  }

  return remString;
}

const decRes = transformTo(10);
console.log(decRes);

最后的输出结果是:1010

将十进制转化为任意进制

function transformTo(decNumber, base){
    let remStack = new Stack();
    let rem;
    let remString = "";
    let digits = [0,1,2,3,4,5,6,7,8,9,'A','B','C','D','E','F'];

    while(decNumber > 0){
        rem = decNumber % base;
        remStack.enStack(rem);
        decNumber = parseInt(decNumber / base);
    }

    while(!remStack.isEmpty()){
        remString += digits[remStack.deStack()];
    }

    return remString;
}

const decRes = transformTo(1200, 16);
console.log(decRes);

输出结果是:4B0


maxmin
226 声望6 粉丝