Array queue wraping
All checks were successful
sample gradle build and test / build (pull_request) Successful in 1m25s

This commit is contained in:
Kruti Shah 2025-02-13 00:43:52 +05:30
parent ca1391130d
commit 026b6c1d09

View File

@ -7,12 +7,14 @@ import javax.annotation.Nonnull;
public class ArrayQueue<E> extends Queue<E>{ public class ArrayQueue<E> extends Queue<E>{
private E[] queueArray = (E[]) new Object[1]; private E[] queueArray = (E[]) new Object[1];
private int startPtr = 0; private int startPtr;
private int endPtr = 0; private int endPtr;
private int size;
private int queueArrayLength = queueArray.length;
@Override @Override
public boolean isEmpty() { public boolean isEmpty() {
return startPtr >= endPtr; return size == 0;
} }
@Override @Override
@ -20,25 +22,27 @@ public class ArrayQueue<E> extends Queue<E>{
if(isEmpty()){ if(isEmpty()){
return null; return null;
} }
E currentValue = queueArray[startPtr]; E currentValue = queueArray[startPtr % queueArrayLength];
queueArray[startPtr++] = null; queueArray[startPtr++ % queueArrayLength] = null;
if(size() < queueArray.length/4){ size--;
changeArraySize(queueArray.length/2); if(size() < queueArrayLength/4){
changeArraySize(queueArrayLength/2);
} }
return currentValue; return currentValue;
} }
@Override @Override
public void enqueue(E element) { public void enqueue(E element) {
queueArray[endPtr++] = element; queueArray[endPtr++ % queueArrayLength] = element;
if(endPtr >= queueArray.length){ size++;
changeArraySize(queueArray.length*2); if(size == queueArrayLength){
changeArraySize(queueArrayLength*2);
} }
} }
@Override @Override
public int size() { public int size() {
return endPtr - startPtr; return size;
} }
private void changeArraySize(int targetSize){ private void changeArraySize(int targetSize){
@ -50,6 +54,7 @@ public class ArrayQueue<E> extends Queue<E>{
queueArray[j++]=tempArray[i]; queueArray[j++]=tempArray[i];
endPtr = size(); endPtr = size();
startPtr = 0; startPtr = 0;
queueArrayLength = queueArray.length;
} }
@Nonnull @Nonnull