From 3cbe62622a2c7e709e38f25d99f45b15c57b2445 Mon Sep 17 00:00:00 2001 From: jrtechs Date: Sat, 25 Aug 2018 11:18:07 -0400 Subject: [PATCH] Created the stack data structure and made junit tests for it. --- .../DataStructures/Lists/Stack/IStack.java | 18 +++++ .../www/DataStructures/Lists/Stack/Stack.java | 80 +++++++++++++++++++ .../net/jrtechs/www/DataStructures/Node.java | 1 + .../www/DataStructures/Lists/StackTest.java | 75 +++++++++++++++++ 4 files changed, 174 insertions(+) create mode 100644 src/main/java/net/jrtechs/www/DataStructures/Lists/Stack/IStack.java create mode 100644 src/main/java/net/jrtechs/www/DataStructures/Lists/Stack/Stack.java create mode 100644 src/test/java/net/jrtechs/www/DataStructures/Lists/StackTest.java diff --git a/src/main/java/net/jrtechs/www/DataStructures/Lists/Stack/IStack.java b/src/main/java/net/jrtechs/www/DataStructures/Lists/Stack/IStack.java new file mode 100644 index 0000000..6b08021 --- /dev/null +++ b/src/main/java/net/jrtechs/www/DataStructures/Lists/Stack/IStack.java @@ -0,0 +1,18 @@ +package net.jrtechs.www.DataStructures.Lists.Stack; + +/** + * Interface for defining behavior of a Stack + * + * @author Jeffery Russell 8-25-18 + * @param + */ +public interface IStack +{ + public boolean empty(); + + public E peek(); + + public E pop(); + + public void push(E item); +} diff --git a/src/main/java/net/jrtechs/www/DataStructures/Lists/Stack/Stack.java b/src/main/java/net/jrtechs/www/DataStructures/Lists/Stack/Stack.java new file mode 100644 index 0000000..f0b92c7 --- /dev/null +++ b/src/main/java/net/jrtechs/www/DataStructures/Lists/Stack/Stack.java @@ -0,0 +1,80 @@ +package net.jrtechs.www.DataStructures.Lists.Stack; + +import net.jrtechs.www.DataStructures.Node; + +/** + * @author Jeffery Russell 8-25-18 + * @param generic stored in collection + */ +public class Stack implements IStack +{ + /** Head node */ + private Node head; + + public Stack() + { + this.head = null; + } + + public Stack(E o) + { + this.head = new Node(o); + } + + + /** + * Determines if the stack is empty + * + * @return + */ + @Override + public boolean empty() + { + return (this.head == null); + } + + + /** + * Retrieves top element with out removing it + * + * @return top element + */ + @Override + public E peek() + { + if(this.head == null) + return null; + return head.getData(); + } + + + /** + * Returns and removes top element from + * the stack. + * + * @return top element + */ + @Override + public E pop() + { + if(this.empty()) + { + return null; + } + E temp = this.head.getData(); + this.head = this.head.getNext(); + return temp; + } + + + /** + * Adds a new element to the Stack. + * + * @param item to add to stack + */ + @Override + public void push(E item) + { + this.head = new Node<>(item, this.head); + } +} diff --git a/src/main/java/net/jrtechs/www/DataStructures/Node.java b/src/main/java/net/jrtechs/www/DataStructures/Node.java index acb33e2..ab70838 100644 --- a/src/main/java/net/jrtechs/www/DataStructures/Node.java +++ b/src/main/java/net/jrtechs/www/DataStructures/Node.java @@ -6,6 +6,7 @@ package net.jrtechs.www.DataStructures; /** + * Class used for storing data in linked structures * * @param */ diff --git a/src/test/java/net/jrtechs/www/DataStructures/Lists/StackTest.java b/src/test/java/net/jrtechs/www/DataStructures/Lists/StackTest.java new file mode 100644 index 0000000..deed2d0 --- /dev/null +++ b/src/test/java/net/jrtechs/www/DataStructures/Lists/StackTest.java @@ -0,0 +1,75 @@ +package net.jrtechs.www.DataStructures.Lists; + +import net.jrtechs.www.DataStructures.Lists.Stack.Stack; +import org.junit.Test; + +import static junit.framework.TestCase.assertFalse; +import static junit.framework.TestCase.assertNotNull; +import static junit.framework.TestCase.assertTrue; + +public class StackTest +{ + + @Test + public void testCreation() + { + assertNotNull(new Stack<>(12.0)); + + assertNotNull(new Stack<>(14.0)); + } + + @Test + public void testInsertion() + { + Stack stack = new Stack<>(); + stack.push(13.0); + + stack.push(23.0); + } + + @Test + public void testPeek() + { + Stack stack = new Stack<>(); + stack.push(13.0); + + stack.push(23.0); + + assertTrue(stack.peek() == 23.0); + } + + + @Test + public void testPop() + { + Stack stack = new Stack<>(); + stack.push(13.0); + + stack.push(23.0); + + assertTrue(stack.pop() == 23.0); + assertTrue(stack.pop() == 13.0); + } + + + @Test + public void testEmpty() + { + Stack stack = new Stack<>(); + + assertTrue(stack.empty()); + + + Stack stack22 = new Stack<>(234.0); + assertFalse(stack22.empty()); + + stack.push(13.0); + + stack.push(23.0); + + assertTrue(stack.pop() == 23.0); + assertTrue(stack.pop() == 13.0); + + assertTrue(stack.empty()); + } +}