Skip to content

Instantly share code, notes, and snippets.

@bgoonz
Created March 14, 2021 00:26
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save bgoonz/a3c27a5126ed87a5f708b11bb3032994 to your computer and use it in GitHub Desktop.
Save bgoonz/a3c27a5126ed87a5f708b11bb3032994 to your computer and use it in GitHub Desktop.
/* Stack data-structure. It's work is based on the LIFO method (last-IN-first-OUT).
* It means that elements added to the stack are placed on the top and only the
* last element (from the top) can be reached. After we get access to the last
* element, he pops from the stack.
* This is a class-based implementation of a Stack. It provides functions
* 'push' - to add an element, 'pop' - to remove an element from the top.
* Also it implements 'length', 'last' and 'isEmpty' properties and
* static isStack method to check is an object the instance of Stack class.
*/
// Class declaration
class Stack {
constructor() {
this.stack = []
this.top = 0
}
// Adds a value to the end of the Stack
push( newValue ) {
this.stack.push( newValue )
this.top += 1
}
// Returns and removes the last element of the Stack
pop() {
if ( this.top !== 0 ) {
this.top -= 1
return this.stack.pop()
}
throw new Error( 'Stack Underflow' )
}
// Returns the number of elements in the Stack
get length() {
return this.top
}
// Returns true if stack is empty, false otherwise
get isEmpty() {
return this.top === 0
}
// Returns the last element without removing it
get last() {
if ( this.top !== 0 ) {
return this.stack[ this.stack.length - 1 ]
}
return null
}
// Checks if an object is the instance os the Stack class
static isStack( el ) {
return el instanceof Stack
}
}
const newStack = new Stack()
console.log( 'Is it a Stack?,', Stack.isStack( newStack ) )
console.log( 'Is stack empty? ', newStack.isEmpty )
newStack.push( 'Hello world' )
newStack.push( 42 )
newStack.push( {
a: 6,
b: 7
} )
console.log( 'The length of stack is ', newStack.length )
console.log( 'Is stack empty? ', newStack.isEmpty )
console.log( 'Give me the last one ', newStack.last )
console.log( 'Pop the latest ', newStack.pop() )
console.log( 'Pop the latest ', newStack.pop() )
console.log( 'Pop the latest ', newStack.pop() )
console.log( 'Is stack empty? ', newStack.isEmpty )
/*
| 19: 26: 04 | bryan @LAPTOP - 9 LGJ3JGS: [ Stack ] Stack_exitstatus: 0 __________________________________________________________o >
node StackES6.js
Is it a Stack ? , true
Is stack empty ? true
The length of stack is 3
Is stack empty ? false
Give me the last one {
a: 6,
b: 7
}
Pop the latest {
a: 6,
b: 7
}
Pop the latest 42
Pop the latest Hello world
Is stack empty ? true |
19 : 26: 10 | bryan @LAPTOP - 9 LGJ3JGS: [ Stack ] Stack_exitstatus: 0 __________________________________________________________o >
*/
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment