diff --git a/module4/src/main/java/com/hithomelabs/princeton1/module4/ArrayQueue.java b/module4/src/main/java/com/hithomelabs/princeton1/module4/ArrayQueue.java index b40378c..d85adee 100644 --- a/module4/src/main/java/com/hithomelabs/princeton1/module4/ArrayQueue.java +++ b/module4/src/main/java/com/hithomelabs/princeton1/module4/ArrayQueue.java @@ -7,12 +7,14 @@ import javax.annotation.Nonnull; public class ArrayQueue extends Queue{ 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 extends Queue{ 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 extends Queue{ queueArray[j++]=tempArray[i]; endPtr = size(); startPtr = 0; + queueArrayLength = queueArray.length; } @Nonnull