DSA: Circular Queue


package az.etibarli.queue;

public class CircularQueue<T> {

private T[] queue;
private int size = 0;
private int front = 0;
private int end = 0;

public CircularQueue() {
this(5);
}

public CircularQueue(int capacity) {
queue = (T[]) new Object[capacity];
}

public boolean add(T element) {
if (isFull()) {
resize();
}
queue[end++] = element;
end = end % queue.length;
size++;
return true;
}

public T remove() {
if (isEmpty()) {
return null;
}
T element = queue[front];
queue[front] = null;
front = (front + 1) % queue.length;
size--;
return element;
}

public T peek() {
if (isEmpty()) {
return null;
}
return queue[front];
}

public int size() {
return size;
}

public boolean isEmpty() {
return size == 0;
}

public boolean isFull() {
return size == queue.length;
}

private void resize() {
T[] newQueue = (T[]) new Object[queue.length * 2];
for (int i = 0; i < size; i++) {
newQueue[i] = queue[(front + i) % queue.length];
}
queue = newQueue;
front = 0;
end = size;
}

@Override
public String toString() {
StringBuilder sb = new StringBuilder("[");
for (int i = 0; i < size; i++) {
int index = (front + i) % queue.length;
sb.append(queue[index]);
if (i != size - 1) {
sb.append(", ");
}
}
return sb.append("]").toString();
}

}




















 

Комментарии

Популярные сообщения из этого блога

Lesson1: JDK, JVM, JRE

SE_21_Lesson_11: Inheritance, Polymorphism

Preparation for Java interview