Я пытаюсь реализовать очередь с массивом. (Не использовать встроенные функции очереди Java). Однако при тестировании массив будет распечатываться только тогда, когда size == maxSize (как в размере массива, достигшем maxSize/capacity). За исключением случаев, когда печать меньше, чем maxSize, проходят тестовые примеры. (Это Очередь с двойным завершением, поэтому элементы могут быть добавлены спереди и сзади). Любой совет?Реализация очереди с Array-Java
package vipQueueArray;
import java.util.NoSuchElementException;
public class vipQueue {
private Object[] array;
private int size = 0;
private int head = 0; // index of the current front item, if one exists
private int tail = 0; // index of next item to be added
private int maxSize;
public vipQueue(int capacity) {
array = new Object[capacity];
maxSize = capacity;
size = 0;
tail = maxSize - 1;
}
public Object Dequeue() {
if (size == 0) {
throw new NoSuchElementException("Cant remove: Empty");
}
Object item = array[head];
array[head] = null;
head = (head + 1) % array.length;
size--;
return item;
}
public void EnqueueVip(Object x) {
if (size == maxSize) {
throw new IllegalStateException("Cant add: Full");
}
array[tail] = x;
tail = (tail - 1) % array.length;
size++;
}
public void Enqueue(Object y) {
if (size == maxSize) {
throw new IllegalStateException("Cant add: Full");
}
array[head] = y;
head = (head + 1) % array.length;
size++;
}
public boolean isFull() {
return (size == maxSize);
}
public boolean isEmpty() {
return (size == 0);
}
}
public class Test{
public static void main(String[] args){
vipQueue Q = new vipQueue(2);
Q.Enqueue(4);
System.out.printf("->%d", Q.Dequeue());
} }
я не могу найти какие-либо проблемы в коде, кроме как я могу добавить элемент в начало очереди. Я думаю, проблема в самом тестовом случае, можете ли вы опубликовать ее также? – Rami
, поэтому maxSize равен 2, и добавляется только один элемент. но dequeue выводит нуль. – Fish
'Enqueue' и' Dequeue' используют 'head'. Я ожидал бы этого из стека, а не из очереди. –