forked from Hithomelabs/Princeton1
68 lines
1.5 KiB
Java
68 lines
1.5 KiB
Java
package com.hithomelabs.princeton1.module4;
|
|
|
|
import java.util.Iterator;
|
|
|
|
public class ArrayQueue<Item> extends Queue<Item> {
|
|
|
|
private int capacity=3;
|
|
private Item[] arr = (Item[]) new Object[capacity];
|
|
private int head=0,tail=0;
|
|
|
|
@Override
|
|
public boolean isEmpty() {
|
|
return (tail - head) == 0;
|
|
}
|
|
|
|
private void resize(int newCapacity){
|
|
Item[] temp = arr;
|
|
arr = (Item[]) new Object[newCapacity];
|
|
int iNew=0,iOld=head;
|
|
while(iOld<tail){
|
|
arr[iNew]=temp[iOld];
|
|
iNew++;
|
|
iOld++;
|
|
}
|
|
|
|
capacity=newCapacity;
|
|
}
|
|
|
|
@Override
|
|
public Item dequeue() {
|
|
if(isEmpty())
|
|
return null;
|
|
// System.out.println(head+" "+arr[head]);
|
|
Item element = arr[head++];
|
|
if(size() < capacity/4)
|
|
resize(capacity/2);
|
|
return element;
|
|
}
|
|
|
|
@Override
|
|
public void enqueue(Item element) {
|
|
if(tail == capacity)
|
|
resize(capacity * 2);
|
|
arr[tail++] = element;
|
|
}
|
|
|
|
@Override
|
|
public int size() {
|
|
return (tail - head);
|
|
}
|
|
|
|
@Override
|
|
public Iterator<Item> iterator() {
|
|
return new Iterator<Item>() {
|
|
int current = head;
|
|
@Override
|
|
public boolean hasNext() {
|
|
return current != tail;
|
|
}
|
|
|
|
@Override
|
|
public Item next() {
|
|
return arr[current++];
|
|
}
|
|
};
|
|
}
|
|
}
|