栈的封装

栈的封装

/**
 * 栈常见的操作:
 * - push(element):添加一个新元素到栈顶位置;
 * - pop():移除栈顶的元素,同时返回被移除的元素;
 * - peek():返回栈顶的元素,不对栈做任何修改(该方法不会移除栈顶的元素,仅仅返回它);
 * - isEmpty():如果栈里没有任何元素就返回true,否则返回false;
 * - size():返回栈里的元素个数。这个方法和数组的length属性类似;
 * - toString():将栈结构的内容以字符串的形式返回。

 */
 class Stack{
    //栈的自带属性
    constructor() {
        this.items = []
    }

    // 栈的相关操作
    /**
     * 1 push():将元素压入栈中
     * 方法一(不推荐)给对象添加方法,其他对象不能复用
     * this.push=()=>{
     * }
     * 方法二
     * 给stack类添加方法,能够多对象复用
     * 推荐
     * stack.prototype.push=function(e){
     * this.items.push(e)
     * }
     */
    push(e) {
        this.items.push(e)
    }
    // 2 pop():从栈中取出元素
    pop(){
        // 利用数组item的pop方法实现Stack类的pop方法
        if (this.isEmpty()) {
            throw new Error('空栈')
        }
        return this.items.pop()
    }
    // 3 peek():查看一下栈顶的元素
    peek(){
        if(this.isEmpty()) throw new Error('栈空了');
        return this.items[this.items.length - 1]
    }
    // 4 isEmpty():判断栈是否为空
    isEmpty(){
        return this.items.length == 0
    }
    // 5 size():获取栈中元素的个数
    size (){
        return this.items.length
    }
    // 6 toString():以字符串的形式输出
    toString() {
        let resultString = ''
        for (let i of this.items) {
            resultString += i + ''
        }
        return resultString
    }

}
module.exports = Stack;

测试

let Stack = require('./01栈的封装.js')
let stack1 = new Stack();

// push() 测试
stack1.push(1);
stack1.push(2);
stack1.push(3);
console.log(stack1.items); //--> [1, 2, 3]

// pop() 测试
console.log(stack1.pop()); //--> 3

// peek() 测试
console.log(stack1.peek()); //--> 2

// isEmpty() 测试
console.log(stack1.isEmpty()); //--> false

// size() 测试
console.log(stack1.size()); //--> 2

// toString() 测试
console.log(stack1.toString()); //--> 1 2

结果

posted @ 2022-06-27 21:58  NaziriteGTC  阅读(51)  评论(0)    收藏  举报