Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/40: Рейтинг темы: голосов - 40, средняя оценка - 4.50
 Аватар для Iangyl
32 / 34 / 21
Регистрация: 31.03.2018
Сообщений: 495

Очередь с приоритетом

01.05.2019, 01:05. Показов 8330. Ответов 4

Студворк — интернет-сервис помощи студентам
Доброй ночи!
Как создать очередь с приоритетом? Объясните пожалуйста.

И еще один вопросик: двоичная куча является очередью с приоритетом или это разные понятия?

P.S. Демонстрация кода не обязательна, но если возможна - очень-очень приветствуется
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
01.05.2019, 01:05
Ответы с готовыми решениями:

Очередь с приоритетом
Всем привет, есть задание (на картинке) Из него сделал все, но не пойму что требуется в последнем пункте про очередь с приоритетом. Как...

Очередь с приоритетом сделать многопоточной
Добрый день. Есть реализованная очередь с приоритетом. Реализованы операции вставки, извлечения и изменения приоритета. Теперь встала...

Сделать очередь с приоритетом, которая бы работала с классом Message<TPriority, TContent>
Добрый день. Пытаюсь вот понять одну штуку. У меня есть некий класс - сообщение: public class Message&lt;TPriority, TContent&gt; { } ...

4
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
01.05.2019, 09:42
Лучший ответ Сообщение было отмечено Iangyl как решение

Решение

Цитата Сообщение от Iangyl Посмотреть сообщение
Как создать очередь с приоритетом?
Ну учитывая вот это условие:
Цитата Сообщение от Iangyl Посмотреть сообщение
Демонстрация кода не обязательна
то все просто:
C#
1
2
3
4
public class PriorityQueue<TPriority, TItem> : IEnumerable<TItem>, IEnumerable<KeyValuePair<TPriority, TItem>>
{
   // Magic
}
Самая простая реализация "на коленке":
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
public class PriorityQueue<TPriority, TItem> : IEnumerable<TItem>, IEnumerable<KeyValuePair<TPriority, TItem>>
{
    private readonly SortedDictionary<TPriority, Queue<TItem>> _storage;
 
    public PriorityQueue() : this(Comparer<TPriority>.Default)
    {
 
    }
 
    public PriorityQueue(IComparer<TPriority> comparer)
    {
        _storage = new SortedDictionary<TPriority, Queue<TItem>>(comparer);
    }
 
    public int Count
    {
        get;
        private set;
    }
 
    public void Enqueue(TPriority priority, TItem item)
    {
        if (!_storage.TryGetValue(priority, out var queue))
            _storage[priority] = queue = new Queue<TItem>();
        queue.Enqueue(item);
 
        Count++;
    }
 
    public TItem Dequeue()
    {
        if (Count == 0)
            throw new InvalidOperationException("Queue is empty");
 
        var queue = _storage.First();
        var item = queue.Value.Dequeue();
        
        if (queue.Value.Count == 0)
            _storage.Remove(queue.Key);
 
        Count--;
        return item;
    }
 
    public IEnumerator<KeyValuePair<TPriority, TItem>> GetEnumerator()
    {
        var items = from pair in _storage
                    from item in pair.Value
                    select new KeyValuePair<TPriority, TItem>(pair.Key, item);
 
        return items.GetEnumerator();
    }
 
    IEnumerator IEnumerable.GetEnumerator() => GetEnumerator();
 
    IEnumerator<TItem> IEnumerable<TItem>.GetEnumerator()
    {
        var items = _storage.SelectMany(pair => pair.Value);
        return items.GetEnumerator();
    }
}
Цитата Сообщение от Iangyl Посмотреть сообщение
двоичная куча является очередью с приоритетом или это разные понятия?
Понятия разные, но двоичная куча может использоваться как деталь реализации очереди с приоритетом.
2
 Аватар для Iangyl
32 / 34 / 21
Регистрация: 31.03.2018
Сообщений: 495
29.05.2019, 17:41  [ТС]
kolorotur, о все хотел спросить, да не знал как правильно поставить вопрос, как определяется приоритет для значения при его вставке в очередь?
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
29.05.2019, 18:30
Цитата Сообщение от Iangyl Посмотреть сообщение
как определяется приоритет для значения при его вставке в очередь?
Приоритет — это аргумент, передаваемый в метод Enqueue для первого параметра (priority)
1
 Аватар для Iangyl
32 / 34 / 21
Регистрация: 31.03.2018
Сообщений: 495
29.05.2019, 20:10  [ТС]
Кстати, я справился более простым и примитивным способом, вот пожалуйста(вдруг кому нужно будет):
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
class QueueP
    {
        private int[] array { get; set; }
        private int[] priority { get; set; }
        private int maxSize;
        public int currentSize { get; private set; }
 
        public QueueP(int length)
        {
            maxSize = length;
            array = new int[maxSize];
            priority = new int[maxSize];
            currentSize = 0;
        }
        public void Show()
        {
            for (int i = 0; i < currentSize; i++)
            {
                Console.WriteLine(array[i] + " - " + priority[i] + "\n\n");
            }
        }
        public void Clear()
        {
            currentSize = 0;
        }
        public bool IsEmpty()
        {
            return currentSize == 0;
        }
        public bool IsFull()
        {
            return currentSize == maxSize;
        }
        public int GetCount()
        {
            return currentSize;
        }
        public void Push(int element, int prior)
        {
            if (!IsFull())
            {
                array[currentSize] = element;
                priority[currentSize] = prior;
                currentSize++;
            }
        }
        public int Pop()
        {
            if (!IsEmpty())
            {
                int max_pri = priority[0];//priority element
                int max_priIndex = 0;//priority index
 
                //find more priority mean
                for (int i = 0; i < currentSize; i++)
                {
                    if ((max_pri % 10) < (priority[i] % 10))
                    {
                        max_pri = priority[i];
                        max_priIndex = i;
                    }
                }
                int temp1 = array[max_priIndex];
                int temp2 = priority[max_priIndex];
 
                for (int i = max_priIndex; i < currentSize - 1; i++)
                {
                    array[i] = array[i + 1];
                    priority[i] = priority[i + 1];
                }
                //reduce quantity
                currentSize--;
                //come back 
                return temp1;
            }
            else return -1;
        }
    }
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
29.05.2019, 20:10
Помогаю со студенческими работами здесь

Очередь с приоритетом. Элементы с наивысшим приоритетом ставятся в начало очереди, с наименьшим – в конец
Здравствуйте! имеется задание: создать очередь с приоритетом (у каждого элемента свой приоритет). Элементы с наивысшим приоритетом ставятся...

Очередь с приоритетом
Здравствуйте! Нужна ваша помощь! Не могу разобраться в чём проблема. Создаю очередь с приоритетом(шаблонный класс) с типом данных Job....

Очередь с приоритетом
Вообщем есть задание найти и описать проблему : Given a priority queue with the following characteristics. 1. Elements are being added...

Очередь с приоритетом
Может кто нибудь простыми словами объяснить что это за структура данных - очередь с приоритетом? И основные операции над ней(вставка,...

Очередь с приоритетом
есть очередь #include &lt;iostream&gt; #include &lt;queue&gt; using namespace std; int main() { priority_queue&lt;float&gt; q; ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru