Пример реализации очереди
Простейшей реализацией очереди является очередь, основанная на
массиве.
public class ArrayQueue implements Queue { // размер массива
private final int capacity;
//индекс начала очереди в массиве private int enqueuePointer;
//индекс конца очереди в массиве private int dequeuePointer;
//а вот и сам массив :) private final int[] data;
//конструктор очереди, принимает максимально
//возможное количество элементов
public ArrayQueue(int capacity) { this.capacity = capacity; this.data = new int[capacity];
}
//добавляет элемент в очередь public void enqueue(int a) {
data[enqueuePointer] = a; enqueuePointer = (enqueuePointer + 1) %
capacity;
}
//возвращает голову очереди
public int peek() {
return data[dequeuePointer];
}
//удаляет текущую голову очереди public void dequeue() {
dequeuePointer = (dequeuePointer + 1) % capacity;
}
//возвращает количество элементов в очереди public int getSize() {
int size = (enqueuePointer - dequeuePointer) % capacity;
if (size < 0) {
size += capacity;
}
return size;
}
//возвращает true, если очередь пустая
public boolean isEmpty() { return getSize() == 0;
}
// возвращает true, если очередь заполнена public boolean isFull() {
return getSize() == capacity;
}
}
Проверка правильности работы
Проверить правильность работы класса ArrayQueue можно, выполнив следующий фрагмент кода. Если очередь работает неправильно, программа
аварийно завершится на одном из операторов assert.
Queue queue = new ArrayQueue(4); assert queue.isEmpty(); queue.enqueue(8);
assert queue.getSize() == 1; queue.enqueue(42);
assert queue.peek() == 8; queue.dequeue();
assert queue.peek() == 42;
Результат выполнения лабораторной работы
В результате выполнения лабораторной работы должны быть написаны следующие классы:
•Queue – интерфейс очереди (приведен в описании).
•Stack – интерфейс стека (приведен в описании).
•ArrayStack implements Stack – стек, организованный на массиве.
•StackedQueue implements Queue – очередь, организованная соединением двух стеков.
•Код, подтверждающий правильность работы классов ArrayStack и StackedQueue.
