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();
}
}
Комментарии
Отправить комментарий