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