Сделать общий класс очереди приоритетов в C#

В этом примере показано, как создать общий класс очереди приоритетов. Общий класс похож на обычный класс, за исключением того, что он может принимать один или несколько параметров, которые являются типами. Затем класс может использовать этот тип для определения переменных и параметров, имеющих этот тип.

В этом примере создается общий класс PriorityQueue, который позволяет связать приоритет с объектами любого заданного типа. Его метод Enqueue добавляет элемент в очередь. Его метод Dequeue возвращает элемент с наибольшим приоритетом из очереди и возвращает его.

В следующем коде показан общий PriorityQueue класс.

class PriorityQueue
{
    // Предметы и приоритеты.
    List Values = new List();
    List Priorities = new List();

    // Возвращает количество элементов в очереди.
    public int NumItems
    {
        get
        {
            return Values.Count;
        }
    }

    // Добавить элемент в очередь.
    public void Enqueue(T new_value, int new_priority)
    {
        Values.Add(new_value);
        Priorities.Add(new_priority);
    }

    // Удалите элемент с наибольшим приоритетом из очереди.
    public void Dequeue(out T top_value, out int top_priority)
    {
        // Найдите самый высокий приоритет.
        int best_index = 0;
        int best_priority = Priorities[0];
        for (int i=1; i

Часть & lt; T & gt; объявления класса указывает, что класс принимает параметр типа с именем T. Внутри класса вы можете использовать символ T для представления типа данных, назначенного классу, когда основная программа его создает.

Класс начинается с определения двух списков для хранения элементов и их приоритетов. Обратите внимание, как код использует & lt; T & gt; для создания List, содержащего любой тип данных, который использовался для создания объекта PriorityQueue. В другом списке просто содержатся значения int.

Свойство NumItems возвращает количество элементов, находящихся в очереди.

Метод Enqueue добавляет элемент в список Values и его приоритет в список Priorities. Обратите внимание, что параметр new_item имеет тип T.

Метод Dequeue находит элемент с наибольшим приоритетом, устанавливает возвращаемые значения для возврата элемента и его приоритета и удаляет их из своих списков.

Следующий код показывает, как основная программа создает свой PriorityQueue.

// Очередь приоритетов.
private PriorityQueue Queue = new PriorityQueue();

После создания очереди, это легко. Следующий код показывает, как программа добавляет к нему элемент.

Queue.Enqueue(txtValue.Text, int.Parse(txtPriority.Text));

Следующий код показывает, как программа удаляет элемент из очереди.

string top_value;
int top_priority;
Queue.Dequeue(out top_value, out top_priority);

См. пример кода для других деталей.

Преимущество общих классов заключается в том, что они могут легко манипулировать объектами любого типа данных. Например, этот общий PriorityQueue класс может содержать string s, Employee s, Order s или что угодно else, с которым вы можете захотеть связать приоритет.

Источник: http://csharphelper.com/blog/2015/02/make-a-generic-priority-queue-class-in-c/

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (Пока оценок нет)
Adblock
detector