Java. Реализация очереди

220
14 апреля 2022, 21:00

У меня есть код ( не мой ), в котором реализована очередь, с методом добавления и удаления элементов. Я не могу понять, зачем инициализировать поле rear как rear = -1? Как я думал, это из-за того, чтобы не выходить за пределы массива, но зачем его тогда сразу объявлять как rear = -1? Ведь первый элемент 0. А так же, строчка в методе add(). Как оно работает ? Буду очень благодарен за объяснение.

queue[++rear] = elem;  //увеличение Rear и вставка
                                  nElem++;  // увеличение количества элементов в очереди

Код программы:

public class Queue {
private int[] queue;
private int maxSize; // максимальное количество элементов в очереди
private int nElem;  // текущее количество элементов в очереди
private int front;
private int rear;
public Queue(int maxSize) {
    this.maxSize = maxSize;
    queue = new int[maxSize];
    rear = -1;
    front = 0;
    nElem = 0;
}
public void add(int elem) {
    if (rear == maxSize - 1) {  // циклический перенос
        rear = -1;
    }
    queue[++rear] = elem;  //увеличение Rear и вставка
    nElem++;  // увеличение количества элементов в очереди
}
public int delete() {
    int temp = queue[front++]; // получаем первый элемент из очереди
    if (front == maxSize) { // циклический перенос
        front = 0;
    }
    nElem--; // уменьшаем количество элементов в очереди
    return temp;
}
public int getFront() {
    return queue[front];
}
public int getRear() {
    return queue[rear];
}
public boolean isFull() {
    return (nElem == maxSize - 1);
}
public boolean isEmpty() {
    return (nElem == 0);
}
public int getSize() {
    return nElem;
}

Код Main:

public class Main {
public static void main(String[] args) {
    Queue myQueue = new Queue(5);
    myQueue.add(10);
    myQueue.add(20);
    myQueue.add(30);
    myQueue.add(40);
    myQueue.add(50);
    System.out.println(myQueue.toString());
    myQueue.delete();
    myQueue.delete();
    myQueue.delete();
    myQueue.add(60);
    while (!myQueue.isEmpty()) {
        int n = myQueue.delete();
        System.out.println("Elem: " + n);
    }
}

}

Answer 1

В методе add как раз у вас и происходит увеличение индекса в строке queue[++rear] = elem; //увеличение Rear и вставка Потому и при инициализации задано -1, при первом добавлении индекс сместиться на требуемые 0, так как -1+1 = 0

READ ALSO
Как умножить EditText на 3 TextView и разделить на 100

Как умножить EditText на 3 TextView и разделить на 100

Я скачал приложение с рецептамиЯ туда хочу добавлять свои рецепты которые проверил, как и на сколько они поднимают сахар

235
Почему при перемножении положительных чисел, получается отрицательное?

Почему при перемножении положительных чисел, получается отрицательное?

При создании, классу Person передается возраст в годах (от 1 до 100)Метод getMilliseconds пересчитывает возраст в миллисекундах

200
Java: JLabel не меняет своё положение

Java: JLabel не меняет своё положение

Я изучаю графическую библиотеку swing и столкнулся с проблемой - текст не изменяет своё положение относительно jpanel при изменении параметров...

239