JS数据结构和算法 --- 栈

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Mr_JavaScript/article/details/84483724

概念:表头进行插入和删除操作的线性表

核心思想:先进后出

作用:在编程语言的编译器和内存中保存变量、方法调用

操作方法:1)push() 进栈,即向栈里添加元素

                  2)pop() 出栈,即把元素从栈中删除

                  3)peak() 查询栈顶元素,即查询栈里最顶部那个元素(最后添加)

                  4)isEmpty() 判断栈是否为空

                  5)clear() 清空栈元素

                  6)size() 查询栈的大小,即栈内元素个数

应用场景:1)进制数的转换; 2)有效字符串的检验; 3)迷宫求解; 4)行编辑程序; 5)二叉树的遍历

栈的理解:可以把栈比作一个储物柜,进栈就是把物品放入储物柜,出栈即取出物品。像一般超市的寄存货柜,你把物品一个个的放进去(进栈),第一个放进去的在最里面,依次堆积,最后一个放进去的在最外面;取物品时候,开柜把商品一个个的取出来(出栈),首先取出的是最外面的一个商品(最后放进去的),然后依次往里,也就是说最后放进去的最先取出,最先放进去的最后取出,即是栈的先进后出的思想。

在实际的开发中,会使用栈的思想去操作数组

实例:使用数组来模拟栈的操作,并实现十进制转二进制


/* jshint esversion: 6 */

/* 定义一个栈类 */
function stack(){
    // 栈
    let arr = [];          //私有属性,只有类里面的方法可以方法
    // 查看栈
    this.getArr = ()=>{
        return arr;
    },
    // 进栈push()
    this.push = (element)=>{
        arr.push(element);
    },
    // 出栈pop()
    this.pop = ()=>{
        return arr.pop();
    },
    // 查看栈顶peek()
    this.peek = ()=>{
        return arr[arr.length-1];    // 倒数第一个元素        
    },
    // 查看栈是否为空isEmpty()
    this.isEmpty = ()=>{
        return arr.length == 0;
    },
    // 查看栈元素个数size()
    this.size = ()=>{
        return arr.length;
    },
    // 清空栈clear()
    this.clear = ()=>{
        arr = [];
    }

}

/* 十进制转二进制 */
function decimalToBinary(num){
    let s = new stack();          //调用上面的stack类
    let remainder;
    while(num>0){
        remainder = num%2;        //去2的余数,即0或1
        s.push(remainder);
        num = Math.floor(num/2);  //向下取整,如5÷2=2.5向下取整2
    }
    return s.getArr().join('');   //把十进制数组转成字符串输出
}

(完)

猜你喜欢

转载自blog.csdn.net/Mr_JavaScript/article/details/84483724