The below is a stack implementation using a singly linked list.
1. push adds node on top of the stack
2. pop removes the top most node from the stack
3. top returns the top most node of the stack without modifying it
4. isEmpty checks if the stack does not have any elements
The details of the StackNode class
package com.ds.programs;
class StackNode<E>
{
E data;
StackNode<E> next;
}
The
Stack class with push, pop, top and isEmpty implementationpackage com.ds.programs;
import java.util.NoSuchElementException;
public class Stack<E>
{
private StackNode<E> m_head;
public Stack () {
m_head = null;
}
public void push (E n) {
StackNode<E> tmp = getNewNode();
tmp.data = n;
StackNode<E> oHead = m_head;
m_head = tmp;
m_head.next = oHead;
}
public void pop () {
if (isEmpty()) throw new NoSuchElementException("Stack is Empty");
m_head = m_head.next;
}
public E top () {
return m_head.data;
}
public boolean isEmpty () {
return m_head == null;
}
private StackNode<E> getNewNode () {
return new StackNode<E>();
}
}
The
StackTest junit class for testing the above stack implementationpackage com.ds.programs;
import junit.framework.Assert;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
public class StackTest
{
private String[] elems = new String[] { "A", "B", "C" };
private Stack<String> stack = new Stack<String>();
@Before
public void setup () {
for (String str : elems)
{
stack.push(str);
}
}
@After
public void destroy () {
while (stack.isEmpty() == false)
{
stack.pop();
}
}
@Test
public void testTop () {
Assert.assertEquals(stack.top(), "C");
}
@Test
public void testPush () {
Assert.assertEquals(stack.top(), "C");
stack.pop();
Assert.assertEquals(stack.top(), "B");
stack.pop();
Assert.assertEquals(stack.top(), "A");
}
}
No comments :
Post a Comment