Поможем написать учебную работу
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
Необходимо выполнить ВСЕ задания.
В очередь могут быть добавлены элементы, каждому элементу при добавлении присваивается один из трех уровней приоритета (low, normal, high)
Элементы из очереди извлекаются в соответствии с их приоритетами (сначала извлекаются элементы с приоритетом high, потом normal, потом low), элементы с одинаковыми приоритетами извлекаются из очереди в порядки их поступления.
В очереди также может происходить операция акселерации все элементы с приоритетом low находящиеся в момент акселерации в очереди увеличивают свой приоритет до high и «обгоняют» элементы с приоритетом normal.
Ниже приведен интерфейс этого класса:
typedef enum
{
LOW,
NORMAL,
HIGH
} ElementPriority;
typedef struct
{
string name;
} QueueElement;
class QueueWithPriority
{
// Конструктор, создает пустую очередь
QueueWithPriority();
// Деструктор
~QueueWithPriority();
// Добавить в очередь элемент element с приоритетом priority
void PutElementToQueue(const QueueElement& element, ElementPriority priority);
// Получить элемент из очереди
// метод должен возвращать элемент с наибольшим приоритетом, который был
// добавлен в очередь раньше других
QueueElement GetElementFromQueue();
// Выполнить акселерацию
void Accelerate();
};
Реализовать этот класс, используя list или deque. Объяснить свой выбор.
Протестируете программу, добавьте отладочный вывод, показывающий, что класс работает правильно.
Например если список содержит:
1 2 3 4 5 6 7 8
то вывод будет иметь вид
1 8 2 7 3 6 4 5
Подсказка: можно использовать рекурсию и двунаправленные итераторы