数据结构与算法(JS版)—— 栈

2021-06-12  本文已影响0人  小牧羊爱吃瓜

1. 概念

2. 创建一个基于数组的栈

class Stack {
    constructor() {
        this.items = [];
    }

    push(i) {
        this.items.push(i);
    }

    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;
    }

    toString() {
        return this.items.toString();
    }
}

// 使用
const stack = new Stack();
console.log(stack.isEmpty());

stack.push(5);
stack.push(8);
stack.push(1);
console.log(stack.pop());
console.log(stack.peek());
console.log(stack.size())
console.log(stack.toString());

补充

3. 创建一个基于对象的栈

class Stack {
    constructor() {
        this.items = {};
        this.count = 0;
    }

    push(i) {
        this.items[this.count] = i;
        this.count++;
    }

    pop() {
        // 不要忘记为空判断
        if (this.isEmpty()) {
            return undefined;
        }

        this.count--;
        // 需要先用变量保存一下this.items[this.count]值,否则返回undefined
        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];
    }

    isEmpty() {
        return this.count === 0;
    }

    clear() {
        this.items = {};
        // 计数不要忘记归0
        this.count = 0;
    }

    size() {
        return this.count;
    }

    toString() {
        if (this.isEmpty()) {
            return '';
        }
        return Object.values(this.items).toString();
    }
}

4. 保护数据结构内部元素(to do)

5. 用栈解决问题(to do)

十进制转二进制

有效括号

汉诺塔

函数调用堆栈

上一篇下一篇

猜你喜欢

热点阅读