| @ -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 <E> | |||||
| */ | |||||
| public interface IStack<E> | |||||
| { | |||||
| public boolean empty(); | |||||
| public E peek(); | |||||
| public E pop(); | |||||
| public void push(E item); | |||||
| } | |||||
| @ -0,0 +1,80 @@ | |||||
| package net.jrtechs.www.DataStructures.Lists.Stack; | |||||
| import net.jrtechs.www.DataStructures.Node; | |||||
| /** | |||||
| * @author Jeffery Russell 8-25-18 | |||||
| * @param <E> generic stored in collection | |||||
| */ | |||||
| public class Stack<E> implements IStack<E> | |||||
| { | |||||
| /** Head node */ | |||||
| private Node<E> 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); | |||||
| } | |||||
| } | |||||
| @ -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<Double> stack = new Stack<>(); | |||||
| stack.push(13.0); | |||||
| stack.push(23.0); | |||||
| } | |||||
| @Test | |||||
| public void testPeek() | |||||
| { | |||||
| Stack<Double> stack = new Stack<>(); | |||||
| stack.push(13.0); | |||||
| stack.push(23.0); | |||||
| assertTrue(stack.peek() == 23.0); | |||||
| } | |||||
| @Test | |||||
| public void testPop() | |||||
| { | |||||
| Stack<Double> 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<Double> stack = new Stack<>(); | |||||
| assertTrue(stack.empty()); | |||||
| Stack<Double> 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()); | |||||
| } | |||||
| } | |||||