@ -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()); | |||||
} | |||||
} |