# QueueApp
Решение состоит из 2-х проектов:
* QueueApp.GUI
* QueueApp.Model
Целевая платформа: .Net Framework 4.7.2
## QueueApp.Model
Данный проект - это библиотека классов.
Здесь содержатся классы:
* Node
* Operations
* Queue
* EmptyQueueException
Классы Node, Queue и методы класса Operations - шаблонные, поэтому при использовании стека мы можем выбирать, какой тип данных он будет хранить.
### Node
Данный класс представляет из себя ячейку стека. Имеет 2 поля
* Value - значение, хранимое в ячейке
* Next - следующая ячейка
### Queue
Данный класс хранит всю информацию об очереди, а так же его верхний элемент. Имеет 3 поля:
* Head - первый элемент
* Tail - последний элемент
* Count - количество элементов
Также имеет переопределение метода ToString.
### Operations
Статичный класс, методы которого реализуют все операции над очередью. Каждый метод является шаблонным, а также методом расширения. Т.е. вызов этих методов можно производить двумя способами:
* queue.Insert(value);
* Operations.Insert(queue, value);
### EmptyQueueException
Пользовательский класс исключения, который должен выбрасываться, когда производится попытка совершить операцию удаления, получения первого или последнего элемента из пустой очереди.
## QueueApp.GUI
GUI для взаимодействия с очередью. Сам объект очереди хранится в классе Program, как публичное статическое поле.
MainForm - это класс главного окна программы. Все операции, кроме добавления нового элемента, происходит в нём.
AddForm - это класс окна добавления нового элемента. Когда оно открывается, главное окно становится недоступным, пока окно AddForm не закроется.
Вывод всех результатов производится через MessageBox.