数据结构与算法--栈

240 阅读1分钟

什么是栈

栈是一个后进先出的数据结构。像蜂窝煤的煤炉,后进的煤是先被拿出来的。

javascript中没有栈,但是可使用Array实现栈的所有功能。栈常用操作:push、pop、stack[stack.length -1]

let stack = [];
stack.push(1);
stack.push(2);

const item1 = stack.pop(); //2
const item2 = stack.pop(); //1

应用场景:十进制转二进制

二进制:100 0011 == 十进制:35

后出来的余数反而要排到前面。把余数依次入栈,然后再出栈,就可以实现余数倒序输出

应用场景:有效的括号(力扣20)

越靠后的左括号,对应的右括号越靠前。左括号入栈,右括号出栈,最后栈为空就是合法的。

应用场景:函数调用堆栈

调用greeting函数,里面调用sayHi函数,sayHi函数最后调用,最先执行完。

最后调用的函数,最先执行完。JS解析使用栈来控制函数的调用顺序。

习题

1、使用ES6的class,封装一个Stack类,包括push、pop、peek方法

class Stack {
    constructor() {
        this.stack = [];
    }
    pop(){
        return this.stack.pop();
    }
    push(...arg){
        return this.stack.push(arg);
    }
    peek(){
        return this.stack[this.stack.length -1];
    }
}

2、请用栈这个数据结构,将100这个十进制数字转为二进制

function binary(num){
    
    let stack = [];
    
    while (num >= 1) {
        if (num % 2 == 1) {
            stack.push(1);
        } else {
            stack.push(0);
        } 
        num = Math.floor(num / 2); 
    } 
    return stack.reverse();
}

知识来源: coding.imooc.com/learn/list/…