124 lines
2.8 KiB
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;
|
|
|
|
|
|
}
|