Princeton1/module4/src/main/java/com/hithomelabs/princeton1/module4/ArrayQueue.java
2025-03-04 16:00:23 +05:30

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++];
}
};
}
}