JS数据结构与算法 —— 栈

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

核心思想:先进后出

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

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

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

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

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

                  5)clear() 清空栈元素

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

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

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

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

例1:js数组来模拟栈的操作

class Stack{
    constructor(){
        this.arr = []       // 定义一个数组代表栈
    }
    push(element){
        this.arr.push(element)      // 进栈
    }
    pop(){
        return this.arr.pop()       // 出栈
    }
    peak(){
        return this.arr[this.arr.length-1]      // 查看栈顶
    }
    isEmpty(){
        return this.arr.length==0        // 查看栈是否为空
    }
    size(){ 
        return this.arr.length          // 查看栈元素个数
    }
    clear(){
        this.arr = []                   // 清空栈
    }
    getStack(){
        return this.arr             // 查看栈
    }
}

 

例2:十进制转二进制

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

更多数据结构相关,请查看专栏:《JavaScript数据结构与算法》

(完)

你可能感兴趣的:(☛,JS数据结构与算法,☛,JavaScript(ES6),栈,数据结构与算法,ES6,十进制转二进制,js)