Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Java / Лабы / lab4.pdf
Скачиваний:
69
Добавлен:
15.03.2015
Размер:
105 Кб
Скачать
☆

Пример реализации очереди

Простейшей реализацией очереди является очередь, основанная на

массиве.

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.

Соседние файлы в папке Лабы