package queue; import exceptions.EmptyQueueException; /** * Created with xgiovio.macbookair. * User: xgiovio * Date: 10/03/14 * Time: 15:49 */ public class ArrayQueue implements Queue { public ArrayQueue(){ queue = (E[])new Object[def_size]; } public ArrayQueue(int in_size){ queue = (E[])new Object[in_size]; } @Override public void enqueue(E element) { if (front == -1){ front++; } queue[rear]= element; rear = (rear + 1) % queue.length; if ( rear ==( front - 1) ){ //reallocate; E[] new_queue = (E[]) new Object[queue.length * 2]; for (int i= 0 ;i<(queue.length -1); i++){ new_queue[i] = queue[front]; front = (front + 1) % queue.length; } rear = queue.length - 1; front = 0; queue = new_queue; } } @Override public E dequeue() throws EmptyQueueException { if (front == -1){ throw new EmptyQueueException(); }else{ E temp = queue[front]; front++; if (front == rear){ front = -1; rear = 0; } return temp; } } @Override public E front() throws EmptyQueueException { if (front == -1){ throw new EmptyQueueException(); }else{ return queue[front]; } } @Override public boolean isEmpty() { if (size() == 0){ return true; }else{ return false; } } @Override public boolean isFull() { return false; } @Override public int size() { if (front == -1){ return 0; } if (front < rear){ return (rear - front); }else{ return (queue.length - front + rear); } } int def_size = 100; E[] queue ; int front = -1; int rear = 0; }