Array queue wraping
All checks were successful
sample gradle build and test / build (pull_request) Successful in 1m25s
All checks were successful
sample gradle build and test / build (pull_request) Successful in 1m25s
This commit is contained in:
parent
ca1391130d
commit
026b6c1d09
@ -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
|
||||||
|
Loading…
Reference in New Issue
Block a user