using System;
using System.Collections.Generic;
using System.Linq;
namespace MyQueue
{
public class PriorityQueue<T> where T : IEquatable<T>
{
private IDictionary<int, IList<T>> elements;
public PriorityQueue()
{
elements = new SortedDictionary<int, IList<T>>();
}
public PriorityQueue(IDictionary<int, IList<T>> elements) : this()
{
}
public int Count()
{
return elements.Count;
}
public bool Contains(T item)
{
bool res = false;
foreach (KeyValuePair<int, IList<T>> pair in elements)
{
enter image description here
if (pair.Value[0].Equals(item))
{
Console.Write($"{item} Found --> {pair.Key} {pair.Value[0]}");
res = true;
}
if (res == true)
{
return res;
}
}
return res;
}
public T Dequeue()
{
IList<T> list = elements[elements.Keys.First()];
int priority = elements.Keys.First();
T highestPriority = list.First();
list.Remove(highestPriority);
if (list.Count == 0)
{
elements.Remove(priority);
}
return highestPriority;
}
public void Enqueue(int priority, T item)
{
IList<T> items;
if (!elements.ContainsKey(priority))
elements.Add(priority, new List<T>());
items = elements[priority];
items.Add(item);
}
public T Peek()
{
IList<T> priorityList = elements[elements.Keys.First()];
return priorityList[0];
}
public int getHighestPriority()
{
int Firstkey = elements.Take(1).Select(d => d.Key).First();
return Firstkey;
}
}
class Program
{
static void Main(string[] args)
{
PriorityQueue<string> priorityQueue = new PriorityQueue<string>();
priorityQueue.Enqueue(3, "Iooawi");
priorityQueue.Enqueue(1, "Zuika");
priorityQueue.Enqueue(2, "Aki");
priorityQueue.Enqueue(5, "Iak");
Console.WriteLine($"Top item: -> { priorityQueue.Peek()}");
Console.WriteLine($"Removed item--> {priorityQueue.Dequeue()}");
Console.WriteLine($"Top item: -> { priorityQueue.Peek()}");
Console.WriteLine($"Items present in this queue {priorityQueue.Count()}");
Console.WriteLine($" ---> { priorityQueue.Contains("Iak")}");
Console.WriteLine($"{priorityQueue.getHighestPriority()}");
}
}
}
Priority Queue Implementation 2
Priority Queue Implementation 3
How do I achieve the following implementations using custom interfaces given in the images, above is the code which I have tried and how do I add the field to the custom interface. I have tried using Iequatable in the above implementation but in the custom interface Ipriority it is not allowing me to set the field int priority? What are the ways to implement interface? Also how to access setHighestPriority method if I set it to private?