Skip to content

Instantly share code, notes, and snippets.

@jongpak
Last active June 27, 2020 13:29
Show Gist options
  • Save jongpak/3730a7c624c4d36e1d76ec5284cb2869 to your computer and use it in GitHub Desktop.
Save jongpak/3730a7c624c4d36e1d76ec5284cb2869 to your computer and use it in GitHub Desktop.
Simple Stack
class SimpleStack {
constructor() {
this._values = [];
}
push(value) {
this._values[this._values.length] = value;
}
pop() {
const ret = this._values[this._values.length - 1];
this._values.length--;
return ret;
}
values() {
return [...this._values];
}
}
const stack1 = new SimpleStack();
stack1.push(1);
console.log(stack1.values()); // [1]
stack1.push(2);
console.log(stack1.values()); // [1, 2]
stack1.push(3);
console.log(stack1.values()); // [1, 2, 3]
console.log(stack1.pop()); // 3
console.log(stack1.values()); // [1, 2]
console.log(stack1.pop()); // 2
console.log(stack1.values()); // [1]
console.log(stack1.pop()); // 1
console.log(stack1.values()); // []
@jongpak
Copy link
Author

jongpak commented Jun 27, 2020

function SimpleStackES5() {
    var _values = [];

    function push(value) {
        _values[_values.length] = value;
    }

    function pop() {
        var ret = _values[_values.length - 1];
        _values.length--;
        return ret;
    }

    function values() {
        return _values.length === 1
            ? [_values[0]]
            : Array.apply(null, _values);
    }

    return {
        push: push,
        pop: pop,
        values: values
    };
}

let stack1 = new SimpleStackES5();
stack1.push('a');
console.log(stack1.values());       // ['a']
stack1.push('b');
console.log(stack1.values());       // ['a', 'b']
stack1.push('c');
console.log(stack1.values());       // ['a', 'b', 'c']

// 'values' is copied array
stack1.values().push('x', 'xx', 'xxx');

console.log(stack1.pop());          // 'c'
console.log(stack1.values());       // ['a', 'b']
console.log(stack1.pop());          // 'b'
console.log(stack1.values());       // ['a']
console.log(stack1.pop());          // 'a'
console.log(stack1.values());       // []

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment