Drop hier links of afbeeldingen om ze aan de editor toe te voegen.

Een wachtrij (Queue) is een datastructuur die werkt volgens het FIFO-principe: First In, First Out. Het element dat je als eerste toevoegt, haal je er ook als eerste weer af. Dat is het omgekeerde van een stapel.

FIFO — First In, First Out: het eerst toegevoegde element wordt als eerste verwijderd.

Een rij wachtende mensen

Een Queue lijkt op een wachtrij in het dagelijks leven: de eerste persoon die in de rij gaat staan, wordt ook als eerste geholpen; wie zich achteraan aansluit, is als laatste aan de beurt. Denk aan een rij aan de kassa, mensen die op de bus wachten, of een file auto’s.

Anders dan bij een stapel werk je dus aan twee kanten: je sluit achteraan aan, en je wordt vooraan geholpen.

Enqueue en Dequeue

De twee belangrijkste operaties op een wachtrij zijn:

"A" "B" "C" voorkant achterkant Dequeue eruit (vooraan) Enqueue erbij (achteraan)

In het voorbeeld sloten "A", "B" en "C" in die volgorde aan. Een Dequeue haalt nu eerst "A" weg (vooraan, het eerst toegevoegde), dan "B", en pas als laatste "C".

De wachtrij gebruiken in C#

Queue<string> mijnQueue = new Queue<string>();
MethodeBeschrijvingVoorbeeld
queue.Enqueue(element)Voegt een element achteraan toemijnQueue.Enqueue("Eerste");
queue.Dequeue()Leest het voorste element én verwijdert hetstring item = mijnQueue.Dequeue();
queue.Peek()Leest het voorste element zonder het te verwijderenstring eerste = mijnQueue.Peek();
queue.Clear()Verwijdert alle elementen uit de wachtrijmijnQueue.Clear();

Net als bij een stapel lopen Dequeue() en Peek() vast op een lege wachtrij. Controleer dus eerst met Count of er nog iemand in de rij staat.

Hoeveel elementen? Count

int aantalElementen = mijnQueue.Count;

Een wachtrij doorlopen

Een foreach over een wachtrij geeft de elementen in gewone volgorde: het eerst toegevoegde element eerst.

foreach (string element in mijnQueue)
{
    Console.WriteLine(element);
}

In de volgende oefeningen gebruik je een wachtrij voor een rij klanten in een winkel en voor het verwerken van taken.