Reemind

Untitled

Apr 23rd, 2021
710
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1.     class Program
  2.     {
  3.         static void Main()
  4.         {
  5.             var queue = new PriorityQueue<int,string>();
  6.  
  7.             queue.Enqueue(3, "Сделать домашку по матану");
  8.             queue.Enqueue(1, "Вымыть руки");
  9.             queue.Enqueue(2, "Покушать");
  10.  
  11.             while(queue.HasItems)
  12.                 queue.Dequeue();
  13.         }
  14.     }
  15.  
  16.     class PriorityQueue<TPriority, TItem>
  17.     {
  18.         //Коллекция ключ-значения, отсортированная по ключу
  19.         private readonly SortedDictionary<TPriority, Queue<TItem>> _subQueues;
  20.  
  21.         public PriorityQueue(IComparer<TPriority> priorityComparer)
  22.         {
  23.             _subQueues = new SortedDictionary<TPriority, Queue<TItem>>(priorityComparer);
  24.         }
  25.  
  26.         public PriorityQueue() : this(Comparer<TPriority>.Default) { }
  27.  
  28.         public bool HasItems { get { return _subQueues.Any(); } }
  29.  
  30.         public int Count { get { return _subQueues.Sum(q => q.Value.Count); } }
  31.  
  32.         //вспомогательный метод. добавляем новое значение с приоритетом
  33.         private void AddQueueOfPriority(TPriority priority)
  34.         {
  35.             _subQueues.Add(priority, new Queue<TItem>());
  36.         }
  37.  
  38.         //добавление нового ключ-значения
  39.         public void Enqueue(TPriority priority, TItem item)
  40.         {
  41.             // если приоритет существует, тогда добавляем новое значение, если приоритета не существует,
  42.             //тогда создаем его и добавляем по этому приоритету новое значение
  43.             if (!_subQueues.ContainsKey(priority))
  44.                 AddQueueOfPriority(priority);
  45.  
  46.             _subQueues[priority].Enqueue(item);
  47.         }
  48.  
  49.  
  50.         //Удаляем первый элемент очереди и выводим его на экран.
  51.         public void Dequeue()
  52.         {
  53.             KeyValuePair<TPriority, Queue<TItem>> first = _subQueues.First();
  54.  
  55.             //удаляем и помещаем в переменную первый элемент очереди
  56.             TItem nextItem = first.Value.Dequeue();
  57.  
  58.             //получаем приоритет первого элемента
  59.             TPriority priority = first.Key;
  60.  
  61.             //если у первого элемента больше нет значений, тогда удаляем его приоритет
  62.             if (!first.Value.Any())
  63.             {
  64.                 _subQueues.Remove(first.Key);
  65.             }
  66.             Console.WriteLine("{0} - {1}", priority, nextItem);
  67.         }
  68.     }
RAW Paste Data

Adblocker detected! Please consider disabling it...

We've detected AdBlock Plus or some other adblocking software preventing Pastebin.com from fully loading.

We don't have any obnoxious sound, or popup ads, we actively block these annoying types of ads!

Please add Pastebin.com to your ad blocker whitelist or disable your adblocking software.

×