Здавалка
Главная | Обратная связь

Реализация - очередь с приоритетами.



#include <iostream>#include <string.h>#include <time.h>using namespace std; class QueuePriority{ // Очередь int * Wait; // Приоритет int * Pri; // Максимальный размер очереди int MaxQueueLength; // Текущий размер очереди int QueueLength; public: // Конструктор QueuePriority(int m); //Деструктор ~QueuePriority(); // Добавление элемента void Add(int c,int p); // Извлечение элемента int Extract(); // Очистка очереди void Clear(); // Проверка существования элементов в очереди bool IsEmpty(); // Проверка на переполнение очереди bool IsFull(); // Количество элементов в очереди int GetCount(); //демонстрация очереди void Show();}; void QueuePriority::Show(){ cout<<"\n-------------------------------------\n"; //демонстрация очереди for(int i=0;i<QueueLength;i++){ cout<<Wait[i]<<" - "<<Pri[i]<<"\n\n"; } cout<<"\n-------------------------------------\n";} QueuePriority::~QueuePriority(){ //удаление очереди delete[]Wait; delete[]Pri;} QueuePriority::QueuePriority(int m){ //получаем размер MaxQueueLength=m; //создаем очередь Wait=new int[MaxQueueLength]; Pri=new int[MaxQueueLength]; // Изначально очередь пуста QueueLength = 0;} void QueuePriority::Clear(){ // Эффективная "очистка" очереди QueueLength = 0;} bool QueuePriority::IsEmpty(){ // Пуст? return QueueLength == 0;} bool QueuePriority::IsFull(){ // Полон? return QueueLength == MaxQueueLength;} int QueuePriority::GetCount(){ // Количество присутствующих в стеке элементов return QueueLength;} void QueuePriority::Add(int c,int p){ // Если в очереди есть свободное место, то увеличиваем количество // значений и вставляем новый элемент if(!IsFull()){ Wait[QueueLength] = c; Pri[QueueLength] = p; QueueLength++; }} int QueuePriority::Extract(){ // Если в очереди есть элементы, то возвращаем тот, // у которого наивысший приоритет и сдвигаем очередь if(!IsEmpty()){ //пусть приоритетный элемент - нулевой int max_pri=Pri[0]; //а приоритетный индекс = 0 int pos_max_pri=0; //ищем приоритет for(int i=1;i<QueueLength;i++) //если встречен более приоритетный элемент if(max_pri<Pri[i]){ max_pri=Pri[i]; pos_max_pri=i; } //вытаскиваем приоритетный элемент int temp1=Wait[pos_max_pri]; int temp2=Pri[pos_max_pri]; //сдвинуть все элементы for(int i=pos_max_pri;i<QueueLength-1;i++){ Wait[i]=Wait[i+1]; Pri[i]=Pri[i+1]; } //уменьшаем количество QueueLength--; // возврат извлеченного элемента return temp1; } else return -1;} void main(){ srand(time(0)); //создание очереди QueuePriority QUP(25); //заполнение части элементов for(int i=0;i<5;i++){ // значения от 0 до 99 (включительно) // и приоритет от 0 до 11 (включительно) QUP.Add(rand()%100,rand()%12); } //показ очереди QUP.Show(); //извлечение элемента QUP.Extract(); //показ очереди QUP.Show();}
Предыдущая Оглавление Следующая
Предыдущая Оглавление Следующая

Домашнее задание

  1. Создать имитацию игры "однорукий бандит". Например, при нажатии кнопки "Enter" происходит "вращение" трех барабанов (естественно, количество вращений каждого из них выбирается случайно), на которых изображены разные значки; и если выпадает определенная комбинация, то игрок получает какой-то выигрыш.
  2. Создать имитационную модель "остановка маршрутных такси". Необходимо вводить следующую информацию: среднее время между появлениями пассажиров на остановке в разное время суток, среднее время между появлениями маршруток на остановке в разное время суток, тип остановки (конечная или нет). Необходимо определить: среднее времяпребывание человека на остановке, достаточный интервал времени между приходами маршруток, чтобы на остановке находилось не более N людей одновременно. Количество свободных мест в маршрутке является случайной величиной.
  3. Разработать приложение, имитирующее очередь печати принтера. Должны быть клиенты, посылающие запросы на принтер, у каждого из которых есть свой приоритет. Каждый новый клиент попадает в очередь в зависимости от своего приоритета. Необходимо сохранять статистику печати (пользователь, время) в отдельной очереди. Предусмотреть вывод статистики на экран.
Предыдущая Оглавление Следующая

 


 

Предыдущая Оглавление Следующая

Урок №27.

  • Односвязный список.
  • Реализация - односвязный список.
  • Двусвязный список.
  • Реализация - двусвязный список.
  • Шаблоны классов.
  • Реализация шаблонного двусвязного списка.
  • Домашнее задание.
Предыдущая Оглавление Следующая
Предыдущая Оглавление Следующая






©2015 arhivinfo.ru Все права принадлежат авторам размещенных материалов.