Различия
Показаны различия между двумя версиями страницы.
— | ochered_s_prioritetom [2021/07/31 21:58] (текущий) – создано - внешнее изменение 127.0.0.1 | ||
---|---|---|---|
Строка 1: | Строка 1: | ||
+ | ====== Очередь с приоритетом C++, C# (си шарп) ====== | ||
+ | {{htmlmetatags> | ||
+ | metatag-description=(Очередь с приоритетом в C++, C#.) | ||
+ | }} | ||
+ | Мы уже познакомились с двумя типами очередей и они оказались достаточно простыми. Однако существует еще одна очередь - очередь с приоритетом. | ||
+ | |||
+ | Дело в том, что часто необходимо создать очередь, | ||
+ | |||
+ | Существует несколько видов приоритетных очередей: | ||
+ | - **Очередь с приоритетным включением** - последовательность элементов очереди является строго упорядоченной. Другими словами, | ||
+ | - **Очереди с приоритетным исключение**м - элемент добавляется в конец очереди, | ||
+ | <note important> | ||
+ | ====== Реализация - очередь с приоритетами ====== | ||
+ | < | ||
+ | #include < | ||
+ | #include < | ||
+ | #include < | ||
+ | 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:: | ||
+ | cout<<" | ||
+ | // | ||
+ | for(int i=0; | ||
+ | cout<< | ||
+ | } | ||
+ | cout<<" | ||
+ | } | ||
+ | |||
+ | QueuePriority:: | ||
+ | { | ||
+ | // | ||
+ | delete[]Wait; | ||
+ | delete[]Pri; | ||
+ | } | ||
+ | |||
+ | QueuePriority:: | ||
+ | { | ||
+ | // | ||
+ | MaxQueueLength=m; | ||
+ | // | ||
+ | Wait=new int[MaxQueueLength]; | ||
+ | Pri=new int[MaxQueueLength]; | ||
+ | // Изначально очередь пуста | ||
+ | QueueLength = 0; | ||
+ | } | ||
+ | |||
+ | void QueuePriority:: | ||
+ | { | ||
+ | // Эффективная " | ||
+ | QueueLength = 0; | ||
+ | } | ||
+ | |||
+ | bool QueuePriority:: | ||
+ | { | ||
+ | // Пуст? | ||
+ | return QueueLength == 0; | ||
+ | } | ||
+ | |||
+ | bool QueuePriority:: | ||
+ | { | ||
+ | // Полон? | ||
+ | return QueueLength == MaxQueueLength; | ||
+ | } | ||
+ | |||
+ | int QueuePriority:: | ||
+ | { | ||
+ | // Количество присутствующих в стеке элементов | ||
+ | return QueueLength; | ||
+ | } | ||
+ | |||
+ | void QueuePriority:: | ||
+ | { | ||
+ | // Если в очереди есть свободное место, то увеличиваем количество | ||
+ | // значений и вставляем новый элемент | ||
+ | if(!IsFull()){ | ||
+ | Wait[QueueLength] = c; | ||
+ | Pri[QueueLength] = p; | ||
+ | QueueLength++; | ||
+ | } | ||
+ | } | ||
+ | |||
+ | int QueuePriority:: | ||
+ | { | ||
+ | // Если в очереди есть элементы, | ||
+ | // у которого наивысший приоритет и сдвигаем очередь | ||
+ | if(!IsEmpty()){ | ||
+ | |||
+ | |||
+ | // | ||
+ | int max_pri=Pri[0]; | ||
+ | //а приоритетный индекс = 0 | ||
+ | int pos_max_pri=0; | ||
+ | |||
+ | // | ||
+ | for(int i=1; | ||
+ | // | ||
+ | if(max_pri< | ||
+ | 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; | ||
+ | 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; | ||
+ | |||
+ | // значения от 0 до 99 (включительно) | ||
+ | // и приоритет от 0 до 11 (включительно) | ||
+ | QUP.Add(rand()%100, | ||
+ | } | ||
+ | // | ||
+ | QUP.Show(); | ||
+ | |||
+ | // | ||
+ | QUP.Extract(); | ||
+ | |||
+ | // | ||
+ | QUP.Show(); | ||
+ | } | ||
+ | </ |
📌 Удобный подбор VPS по параметрам доступен на DIEGfinder.com - официальном инструменте проекта DIEG. Это часть единой экосистемы, созданной для того, чтобы помочь быстро найти подходящий VPS/VDS сервер для любых задач хостинга.
📌 Для тестирования скриптов, установщиков VPN и Python-ботов рекомендуем использовать надежные VPS на короткий срок. Подробнее о быстрой аренде VPS для экспериментов - читайте здесь.
💥 Подпишись в Телеграм 💥 и задай вопрос по сайтам и хостингам бесплатно!7 Самых Популярных Статей
- Как запустить скрипты и веб-приложения на Python
- Что такое страны TIER 1,2,3
- 7 способов сравнения файлов по содержимому в Windows или Linux
- Установка и тестирование веб-панели HestiaCP
- Nginx простые примеры конфигурации
- top, htop, atop определение загрузки ОС (Load average, LA)
- Использование rsync в примерах
7 Самых Популярных Обзоров
- Хостинг для Python-скриптов и приложений
- ТОП 4 лучших антидетект браузеров (Бесплатные & Платные)
- Подборка купонов (промокоды) на хостинг, антидетект браузеры
- Обзор THE.Hosting (PQ Hosting): надежный хостинг с профессиональной поддержкой
- Хостинг в России
- Хостинг в Европе
- Обзор браузера Dolphin {anty} для мультиаккаунтинга