Uwaga: nie mylić z generyczną wersją Queue<T>
.
Queue kolejka = new Queue();
using System.Collections;
Możemy bez problemu dodawać byty różnych typów.
Jak dodaje się elementy na kolejkę, czy trzeba po kolei, czy można dowolnie? czy muszą być niepowtarzalne?
Do dodania czegoś na kolejkę służy metoda Enqueue
. Elementy dodawany jest na koniec kolejki. Elementy mogą się powtarzać.
Za pomocą foreach
. Kolejność zgodnie z zasadą FIFO (first-in, first-out).
Metoda dedykowana dla kolejki aby tylko zwrócić pierwszy element: Peek()
. Ostaniego wprost nie możemy zwrócić.
Możemy użyć także metody Pop
która zwraca i usuwa pierwszy element z kolejki.
Możemy bezpośrednio zwrócić tylko pierwszy. Zwrócenie pozostałych nie jest możliwe.
Bezpośrednio nie można.
Poprzez pobranie właściwości: Count
.
Poprzez metodę Contains
.
Przykładowy kod:
Queue kolejka2 = new Queue();
kolejka2.Enqueue(4);
kolejka2.Enqueue("fdg");
kolejka2.Enqueue(-2);
Console.WriteLine(kolejka2.Contains(4)); //true
Console.WriteLine(kolejka2.Contains(0)); //false
Warto pamiętać, że dla typów referencyjnych sprawdzamy odwołanie.
np. dla klasy Osoba
:
class Osoba
{
string imie;
public Osoba(string imie)
{
this.imie = imie;
}
}
taki kod zawsze zwróci false
:
Queue osoby = new Queue();
osoby.Enqueue(new Osoba("Jan"));
osoby.Enqueue(new Osoba("Anna"));
osoby.Enqueue(new Osoba("Jan"));
Console.WriteLine(osoby.Contains(new Osoba("Jan")));
Poprawnie powinniśmy zadeklarować zmienną refencyjną poza kolejką:
Osoba o1 = new Osoba("Jan");
Osoba o2 = new Osoba("Anna");
Queue osoby = new Queue();
osoby.Enqueue(o1);
osoby.Enqueue(o2);
Console.WriteLine(osoby.Contains(o1));
Jak można odwrócić elementy w kolejce? w tym kontekście chodzi o odwrócenie kolejności (a nie odwrotne sortowanie)
Bezpośrednio nie ma takiej możliwości. Możemy stworzyć "kolejkę" pomocniczą, a potem zamienić odwołanie do właściwego kolejki.
Za pomocą metody Dequeue
która usuwa i zwraca pierwszy element w kolejce. Innych nie możemy bezpośrednio.