Zum Hauptinhalt springen
Veröffentlicht am

Queue-Klasse in C#

Teilen:

Einführung

Die Queue-Klasse in C# ist ein Beispiel für eine der grundlegendsten Datenstrukturen der Informatik. Obwohl sie einfach wirken mag, kann eine Warteschlange die Lösung für viele Probleme sein, die die Organisation und sequenzielle Verarbeitung von Daten erfordern.

Was ist eine Queue?

Eine Queue, oder Warteschlange, ist eine Datenstruktur, die nach dem FIFO-Prinzip (First In - First Out) arbeitet. Das bedeutet, dass das erste Element, das in die Warteschlange eintritt, auch als erstes wieder herauskommt.

Hauptmerkmale

  • Reihenfolge: Das Hauptmerkmal einer Warteschlange ist die Beibehaltung der Reihenfolge. Die Eingangsreihenfolge der Elemente entspricht der Ausgangsreihenfolge.
  • Dynamik: Obwohl sie eine maximale Kapazität haben kann, kann eine Warteschlange im Allgemeinen nach Bedarf wachsen und schrumpfen.
  • Universalität: Fast alle Programmiersprachen verfügen über eine Art Queue-Implementierung.

Wesentliche Methoden der Queue-Klasse in C#

  • Enqueue(Objekt): Fügt ein Objekt am Ende der Warteschlange hinzu.
  • Dequeue(): Entfernt das Objekt am Anfang der Warteschlange und gibt es zurück.
  • Peek(): Gibt das Objekt am Anfang der Warteschlange zurück, ohne es zu entfernen.
using System;
using System.Collections.Generic;

namespace Base {
  class WarteschlangeKlasse {
    private Queue<int> warteschlange = new Queue<int>();
    private const int Multiplikator = 10;
    private int zahl = 1;

    public void Run() {
      for (int index = 1; index <= 5; index++) {
        warteschlange.Enqueue(zahl);
        zahl *= Multiplikator; // 1, 10, 100, 1000, 10000
      }

      WarteschlangeAusgeben();

      Console.WriteLine($"\nEntfernung der Zahl {warteschlange.Dequeue()} aus der Warteschlange mit der Methode Dequeue().\n");

      WarteschlangeAusgeben();

      Console.WriteLine($"\nDie Zahl an der Spitze der Warteschlange ist die {warteschlange.Peek()}.");
    }

    private void WarteschlangeAusgeben() {
      foreach (var zahl in warteschlange)
        Console.WriteLine(zahl);
    }
  }
}

/*
  1
  10
  100
  1000
  10000

  Entfernung der Zahl 1 aus der Warteschlange mit der Methode Dequeue().

  10
  100
  1000
  10000

  Die Zahl an der Spitze der Warteschlange ist die 10.
*/

Queue-Varianten

Es gibt verschiedene Varianten der Warteschlangenstruktur, die unterschiedliche Arten von Problemen lösen:

  • Priority Queue: In einer Prioritätswarteschlange werden den Elementen Prioritäten zugewiesen. Wenn ein Element eingereiht wird, wird es basierend auf seiner Priorität platziert und nicht nach der Ankunftsreihenfolge.
  • Circular Queue: Bei dieser Variante zeigt das letzte Element auf das erste und bildet so einen Kreis. Sie ist nützlich für Pufferprobleme, z. B. bei der Medienwiedergabe.
  • Double-ended Queue (Deque): Elemente können an beiden Enden hinzugefügt oder entfernt werden.

Praktische Anwendungen

  1. Betriebssysteme: Verwenden Warteschlangen, um Prozesse zu verwalten, die auf eine bestimmte Ressource warten oder ausgeführt werden sollen.
  2. Spielsysteme: Werden verwendet, um KI-Aufgabenlisten, Animationen und vieles mehr zu verwalten.
  3. Echtzeit-Anwendungen: Verwaltung von Aufgaben in Flugverkehrskontrollsystemen oder Telemetrie.

Vorteile und Einschränkungen

Vorteile

  • Organisation: Hält Daten in einer systematischen Reihenfolge.
  • Ressourcenverwaltung: Hilft sicherzustellen, dass Ressourcen effizient genutzt werden, insbesondere in Multitasking-Systemen.

Einschränkungen

  • Datenzugriff: Bei einer Standard-Warteschlange kann nur auf das erste Element zugegriffen werden.
  • Kapazität: Wenn die Warteschlange mithilfe eines Arrays implementiert ist, kann sie sich füllen.

Fazit

Die Queue-Klasse in C# und ihre Anwendungen zu verstehen ist für jeden Entwickler unerlässlich. Sie ermöglicht eine bessere Datenorganisation und kann der Schlüssel zur Optimierung vieler Algorithmen und Systeme sein.

Happy coding!