Mając kod kolejki
http://www.algorytm.org/klasyczne/kolejka/kolejka-1-cs.html
Jak usunąć element kolejki o danym parametrze? Np. mając kolejkę 2,4,6,8,10,12 chciałbym usunąć elementy 2,8,12 by w efekcie otrzymać kolejkę 4,6,10.
A czy przypadkiem głównym założeniem kolejki (LIFO lub FIFO) jest to aby zdejmować elementy w określonej kolejności? W tym przypadku ta zasada zostaje zaburzona.
Musisz przeiterować po elementach kolejki i znaleźć ten który spełnia warunek. Jeśli go znajdziesz na pozycji n
: elementowi n - 1
w polu next
przypisujesz referencję do elementu n + 1
.
Sytuacje szczególne to kiedy szukany element jest pierwszym lub ostatnim - wtedy trzeba pokombinować z polem first
lub last
w klasie kolejki.
To, co chcesz zrobić nazywa się listą. W C# zaimplementowane jako LinkedList. Kolejki nie mają takich funkcjonalności.
Gdyby ktoś potrzebował metodę usuwającą element z kolejki to tutaj kod.
Oczywiście nie jest idealny, ale każdy sobie może go dopieścić.
public void deleteElem(string x)
{
bool a = true;
if (first !=null)
{
if (first.next==null)
{
if (first.value==x)
{
first = null;
}
}
else
{
Node nodeOne = first;
Node nodeNext = first.next;
Node nodeLast = null;
while (a)
{
if (nodeOne.value==x)
{
if (nodeOne==first)
{
first = nodeNext;
}
else
{
nodeLast.next = nodeNext;
}
nodeLast = nodeOne;
nodeOne = nodeNext;
if (nodeNext==null)
{
last = nodeLast;
break;
}
nodeNext = nodeNext.next;
}
else
{
if (nodeNext==null)
{
last = nodeLast;
break;
}
nodeLast = nodeOne;
nodeOne = nodeNext;
nodeNext = nodeNext.next;
}
}
}
}
else
{
Console.WriteLine("queue is empty");
//a = false;
}
}
Działa to? Testowałeś?