From c7b59a76821579ae4996c7f477478397b650053c Mon Sep 17 00:00:00 2001 From: maxim Date: Fri, 7 Aug 2020 10:16:08 +0300 Subject: [PATCH 1/3] new stack implementation (ES6) fixes: #{246} --- Data-Structures/Stack/StackES6.js | 68 +++++++++++++++++++++++++++++++ 1 file changed, 68 insertions(+) create mode 100644 Data-Structures/Stack/StackES6.js diff --git a/Data-Structures/Stack/StackES6.js b/Data-Structures/Stack/StackES6.js new file mode 100644 index 0000000000..9c1f8504c8 --- /dev/null +++ b/Data-Structures/Stack/StackES6.js @@ -0,0 +1,68 @@ +/* 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() + } + return null + } + + // 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) From df5de968379d80ea3fb0f298718125741fa4c2a9 Mon Sep 17 00:00:00 2001 From: vinayak Date: Fri, 21 Aug 2020 00:13:17 +0530 Subject: [PATCH 2/3] Update Data-Structures/Stack/StackES6.js Co-authored-by: Tapajyoti Bose <44058757+ruppysuppy@users.noreply.github.com> --- Data-Structures/Stack/StackES6.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Data-Structures/Stack/StackES6.js b/Data-Structures/Stack/StackES6.js index 9c1f8504c8..f674b32ab5 100644 --- a/Data-Structures/Stack/StackES6.js +++ b/Data-Structures/Stack/StackES6.js @@ -27,7 +27,7 @@ class Stack { this.top -= 1 return this.stack.pop() } - return null + throw "Stack Underflow" } // Returns the number of elements in the Stack From db1f0d67062245c8a3802012c75fbf868aa8d511 Mon Sep 17 00:00:00 2001 From: vinayak Date: Fri, 21 Aug 2020 00:24:14 +0530 Subject: [PATCH 3/3] Update StackES6.js --- Data-Structures/Stack/StackES6.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Data-Structures/Stack/StackES6.js b/Data-Structures/Stack/StackES6.js index f674b32ab5..6e54bab842 100644 --- a/Data-Structures/Stack/StackES6.js +++ b/Data-Structures/Stack/StackES6.js @@ -27,7 +27,7 @@ class Stack { this.top -= 1 return this.stack.pop() } - throw "Stack Underflow" + throw new Error('Stack Underflow') } // Returns the number of elements in the Stack