Files
unisa_strutture_dati_2013_2014/queue/ArrayQueue.java

124 lines
2.8 KiB
Java

package queue;
import exceptions.EmptyQueueException;
/**
* Created with xgiovio.macbookair.
* User: xgiovio
* Date: 10/03/14
* Time: 15:49
*/
//Copyright (c) 2003 Brown University, Providence, RI
//Additional modifications and methods by xgiovio
public class ArrayQueue<E> implements Queue<E> {
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++;
}
if ( rear == mod( front - 1,queue.length) ){
//reallocate;
E[] new_queue = (E[]) new Object[queue.length * 2];
for (int i= 0 ;i<(queue.length -1); i++){
new_queue[i] = queue[(front + i) % queue.length];
}
rear = queue.length - 1;
front = 0;
queue = new_queue;
queue[rear]= element;
rear = (rear + 1) % queue.length;
} else {
queue[rear]= element;
rear = (rear + 1) % queue.length;
}
}
@Override
public E dequeue() throws EmptyQueueException {
if (front == -1){
throw new EmptyQueueException();
}else{
E temp = queue[front];
front = (front + 1)%queue.length;
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 int size() {
if (front == -1){
return 0;
}
if (front < rear){
return (rear - front);
}else{
return (queue.length - (front - rear));
}
}
@Override
public String toString() {
String to_return = "";
to_return = to_return + "[";
for (int i = 0;i<size();i++){
if ( ((i+front)%queue.length) == mod(rear - 1,queue.length)){
to_return+=(queue[(i+front)%queue.length].toString());
}else{
to_return+=(queue[(i+front)%queue.length].toString() + ",");
}
}
to_return = to_return + "]";
return to_return;
}
private int mod(int a,int b){
return (((a % b) + b) % b);
}
int def_size = 100;
E[] queue ;
int front = -1;
int rear = 0;
}