๐Ÿ“ฆStack

๐Ÿšง under construction

data structure โŸฉ Stack

implementations

// โญ Stack
//    2022.12.28 - ??:?? - first version
// ----------------------------
// ๐Ÿ”น .push(a, b, c ...)
// ๐Ÿ”น .pop()
// ๐Ÿ”น .enqueue(a, b, c ...)    // speaks in Queue's language
// ๐Ÿ”น .dequeue()               // (same)
// ๐Ÿ”ธ .first
// ๐Ÿ”ธ .length
// ๐Ÿ”ธ .isEmpty
// ----------------------------
// ๐Ÿ”น .toString()
// ๐Ÿ”น .log()
//
class Stack {

    // ๐Ÿ”ธ private members
    #elements = [];    // stack elements
    
    // โญ const q = new Queue(a, b, c ...)
    constructor(...elements) {
        this.push(...elements);
    }
    
    // ๐Ÿ”น stack.push(a, b, c ...)
    push(...elements) {
        for (const element of elements) {
            this.#elements.push(element);
        }
    }
    
    // ๐Ÿ”น stack.pop()
    pop() {
        if (this.isEmpty) return null;
        return this.#elements.pop();
    }
    
    // ๐Ÿ”ธ stack.first
    get first() {
        if (this.isEmpty) return null;
        return this.#elements[this.length - 1];
    }
    
    // ๐Ÿ”ธ stack.length
    get length() {
        return this.#elements.length;
    }
    
    // ๐Ÿ”ธ stack.isEmpty
    get isEmpty() {
        return this.length === 0;
    }

    // ๐Ÿ”น stack.toString()
    toString() {
        return `Stack: [${this.#elements} ->`;
    }

    // -----------------------------
    //   speak in Queue's language
    // -----------------------------

    enqueue(...elements) { this.push(...elements) }
    dequeue() { return this.pop() }

    // -------------
    //   dubugging
    // -------------

    // ๐Ÿ”น .log()
    log() { console.log(this.toString()) }

    // ๐Ÿ”ธ .debugInfo
    get debugInfo() { return '' }
}

module.exports = { Stack };

Last updated