datastructures/stack.js

'use strict';

/**
 * Create a FILO stack data structure.
 * @constructor
 */
function Stack() {
    this.stack = [];
}

/**
 * Get the number of objects in the stack.
 * @returns {number} Number of elements in the stack.
 */
Stack.prototype.size = function() {
    return this.stack.length;
};

/**
 * Clear the contents of the stack.
 */
 Stack.prototype.clear = function() {
    this.stack = [];
};

/**
 * Push an object in to the stack.
 * @param {object} obj - Any object to be pushed into the stack.
 */
Stack.prototype.push = function(obj) {
    this.stack.push(obj);
};

/**
 * Get the front element of the stack and removes it from the stack.
 * @returns {object} Front element from the stack.
 */
Stack.prototype.pop = function() {
    var len = this.stack.length;
    var obj = this.stack[len-1];
    this.stack.splice(len-1,1);
    return obj;
};

/**
 * Get the front element of the stack without removing it from the stack.
 * @returns {object} Front element from the stack.
 */
Stack.prototype.peek = function() {
    var len = this.stack.length;
    var obj = this.stack[len-1];
    return obj;
};

/**
 * Checks if the stack isn't empty.
 * @returns {boolean} Whether or not the stack has another element. True if yes.
 */
Stack.prototype.hasNext = function() {
    return this.stack.length !== 0;
};

/**
 * Checks if the stack is empty.
 * @returns {boolean} Whether or not the stack is empty. True if yes.
 */
Stack.prototype.isEmpty = function() {
    return this.stack.length === 0;
};

module.exports = Stack;