Merge pull request #712 from AnkitAtBrillio/local
Adding Linked List based General queue implementation
This commit is contained in:
commit
7f523ffee8
136
src/main/java/com/dataStructures/GeneralQueue.java
Normal file
136
src/main/java/com/dataStructures/GeneralQueue.java
Normal file
@ -0,0 +1,136 @@
|
|||||||
|
package src.main.java.com.dataStructures;
|
||||||
|
|
||||||
|
import src.main.java.com.types.Queue;
|
||||||
|
|
||||||
|
import java.util.Iterator;
|
||||||
|
import java.util.LinkedList;
|
||||||
|
import java.util.NoSuchElementException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* linkedList based implementation of queue.
|
||||||
|
* This implementation is not thread safe and need exclusive thread safety measures from the client.
|
||||||
|
*
|
||||||
|
* @param <T>
|
||||||
|
*/
|
||||||
|
public class GeneralQueue<T> implements Queue<T> {
|
||||||
|
|
||||||
|
private LinkedList<T> queue;
|
||||||
|
private Iterator<T> itr;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Overloaded constructor to create queue of specific size
|
||||||
|
*/
|
||||||
|
public GeneralQueue() {
|
||||||
|
queue = new LinkedList<>();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean add(T t) {
|
||||||
|
|
||||||
|
if (queue == null) {
|
||||||
|
throw new IllegalStateException();
|
||||||
|
}
|
||||||
|
if (t == null) {
|
||||||
|
throw new NullPointerException();
|
||||||
|
}
|
||||||
|
queue.add(t);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean remove(T t) {
|
||||||
|
if (null == queue) {
|
||||||
|
throw new NullPointerException();
|
||||||
|
}
|
||||||
|
if (queue.isEmpty()) {
|
||||||
|
throw new NoSuchElementException();
|
||||||
|
}
|
||||||
|
queue.remove(t);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isEmpty() {
|
||||||
|
return null == queue || queue.size() == 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Iterator<T> iterator() {
|
||||||
|
if (queue == null) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
itr = queue.iterator();
|
||||||
|
return itr;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean offer(T t) {
|
||||||
|
if (null == queue) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (t == null) {
|
||||||
|
throw new NullPointerException();
|
||||||
|
}
|
||||||
|
queue.add(t);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public T poll() {
|
||||||
|
if (queue == null || queue.isEmpty()) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
return queue.pollFirst();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public T element() {
|
||||||
|
if (queue == null || queue.isEmpty()) {
|
||||||
|
throw new NoSuchElementException();
|
||||||
|
}
|
||||||
|
|
||||||
|
return queue.peekFirst();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public T peek() {
|
||||||
|
if (null == queue || queue.size() == 0) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
return queue.peekFirst();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean hasNext() {
|
||||||
|
return itr.hasNext();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public T next() {
|
||||||
|
return itr.next();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Object[] toArray() {
|
||||||
|
Object[] elements = {};
|
||||||
|
if (null == queue || queue.isEmpty()) {
|
||||||
|
return elements;
|
||||||
|
}
|
||||||
|
elements = new Object[queue.size()];
|
||||||
|
for (int i = 0; i < queue.size(); i++) {
|
||||||
|
elements[i] = queue.get(i);
|
||||||
|
}
|
||||||
|
|
||||||
|
return elements;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int size() {
|
||||||
|
if (null == queue || queue.isEmpty()) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
return queue.size();
|
||||||
|
}
|
||||||
|
}
|
57
src/main/java/com/types/DataStructure.java
Normal file
57
src/main/java/com/types/DataStructure.java
Normal file
@ -0,0 +1,57 @@
|
|||||||
|
package src.main.java.com.types;
|
||||||
|
|
||||||
|
import java.util.Iterator;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This interface is to define bacis functionality expected out of any implementation class
|
||||||
|
* Since this is a data structure it should have the flexibility to contain any kind of object hence it has been made generic
|
||||||
|
* Any implementation class need not to be thread safe or it could be depending on the implementation class how does it want to behave.
|
||||||
|
*
|
||||||
|
* @param <T>
|
||||||
|
*/
|
||||||
|
public interface DataStructure<T> extends Iterator<T> {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Method to add element in the structure
|
||||||
|
*
|
||||||
|
* @param t element
|
||||||
|
* @return boolean
|
||||||
|
*/
|
||||||
|
boolean add(T t);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Method to remove the given object from structure
|
||||||
|
*
|
||||||
|
* @param o element
|
||||||
|
* @return boolean
|
||||||
|
*/
|
||||||
|
boolean remove(T o);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Method to get Iterator to parse on the given structure
|
||||||
|
*
|
||||||
|
* @return iterator
|
||||||
|
*/
|
||||||
|
Iterator<T> iterator();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Method to check if structure is empty
|
||||||
|
*
|
||||||
|
* @return boolean
|
||||||
|
*/
|
||||||
|
boolean isEmpty();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Method to get all the elements of data structure in array
|
||||||
|
*
|
||||||
|
* @return arr
|
||||||
|
*/
|
||||||
|
Object[] toArray();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Method to get the size or number of elements in structure
|
||||||
|
*
|
||||||
|
* @return size
|
||||||
|
*/
|
||||||
|
int size();
|
||||||
|
}
|
45
src/main/java/com/types/Queue.java
Normal file
45
src/main/java/com/types/Queue.java
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
package src.main.java.com.types;
|
||||||
|
|
||||||
|
|
||||||
|
import java.util.NoSuchElementException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Interface to provide queue specific functionality to the implementing class
|
||||||
|
* This interface only defines the functionality which the queue implementing classes require.
|
||||||
|
* Any class having queue behaviour should implement this interface and override all of its methods
|
||||||
|
*
|
||||||
|
* @param <T>
|
||||||
|
*/
|
||||||
|
public interface Queue<T> extends DataStructure<T> {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Method to add element
|
||||||
|
*
|
||||||
|
* @param t element
|
||||||
|
* @return boolean
|
||||||
|
* @throws NullPointerException
|
||||||
|
*/
|
||||||
|
boolean offer(T t) throws NullPointerException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Method to remove element
|
||||||
|
*
|
||||||
|
* @return element
|
||||||
|
*/
|
||||||
|
T poll();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Method to check element on head
|
||||||
|
*
|
||||||
|
* @return element
|
||||||
|
*/
|
||||||
|
T peek();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Method to check element on head. This throws exception on runtime if the queue is empty
|
||||||
|
*
|
||||||
|
* @return element
|
||||||
|
* @throws NoSuchElementException
|
||||||
|
*/
|
||||||
|
T element() throws NoSuchElementException;
|
||||||
|
}
|
45
src/test/java/com/dataStructures/GeneralQueueTest.java
Normal file
45
src/test/java/com/dataStructures/GeneralQueueTest.java
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
package src.test.java.com.dataStructures;
|
||||||
|
|
||||||
|
|
||||||
|
import org.junit.Assert;
|
||||||
|
import org.junit.Test;
|
||||||
|
import src.main.java.com.dataStructures.GeneralQueue;
|
||||||
|
import src.main.java.com.types.Queue;
|
||||||
|
|
||||||
|
public class GeneralQueueTest {
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testGeneralQueue() {
|
||||||
|
|
||||||
|
Queue<Integer> myQueue = new GeneralQueue<>();
|
||||||
|
myQueue.add(10);
|
||||||
|
myQueue.add(20);
|
||||||
|
myQueue.add(30);
|
||||||
|
myQueue.add(40);
|
||||||
|
myQueue.add(50);
|
||||||
|
|
||||||
|
|
||||||
|
Object[] myArray = myQueue.toArray();
|
||||||
|
Assert.assertEquals(myArray.length, myQueue.size());
|
||||||
|
|
||||||
|
myQueue.remove(20);
|
||||||
|
Assert.assertEquals(myQueue.size(), 4);
|
||||||
|
|
||||||
|
Boolean isEmpty = myQueue.isEmpty();
|
||||||
|
Assert.assertEquals(Boolean.valueOf("false"), Boolean.valueOf(isEmpty));
|
||||||
|
|
||||||
|
myQueue.offer(60);
|
||||||
|
Assert.assertEquals(5, myQueue.size());
|
||||||
|
|
||||||
|
int polledElement = myQueue.poll();
|
||||||
|
Assert.assertEquals(10, polledElement);
|
||||||
|
|
||||||
|
int element = myQueue.element();
|
||||||
|
Assert.assertEquals(30, element);
|
||||||
|
|
||||||
|
myQueue.poll();
|
||||||
|
int peekedElement = myQueue.peek();
|
||||||
|
Assert.assertEquals(40, peekedElement);
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user