In C # verwende ich eine Warteschlangensammlung. Ich kann leicht in die Warteschlange oder aus der Warteschlange nehmen. Okay, jetzt möchte ich etwas in der Mitte der Warteschlange oder am Anfang der Warteschlange einfügen. Ich finde keine Methode, um so etwas zu tun. Was empfehlen Sie als alternative Sammlung?
Eine Warteschlange kann definitionsgemäß nur in die Warteschlange eingereiht und aus der Warteschlange entfernt werden. Wenn Sie in die Mitte einfügen möchten, dann möchten Sie eine vollständige Liste (wahrscheinlich LinkedList<T>
), nicht eine Queue
.
Ich meine, du würdest nicht versuchen, dich mitten in der Schlange in einem Supermarkt einzufügen (hoffe ich); es funktioniert hier genauso.
Was Sie suchen, ist ein LinkedList<T>
. Sie können zum Anfang hinzufügen, Mitte (mit AddBefore oder AddAfter) oder Ende der Liste.
Dies ist vorteilhaft gegenüber der Verwendung von List<T>
, da Sie RemoveFirst oder RemoveLast verwenden können, um eine Warteschlange oder einen Stack näher zu imitieren.
Obwohl die Antworten auf dieser Seite korrekt sind, wenn Sie sich in einer Position befinden, in der Sie nichts anderes als eine Warteschlange verwenden können, können Sie (mit etwas Aufwand) ein Element in die Mitte einer Warteschlange hinzufügen. Ob es getan werden soll oder nicht, ist eine andere Geschichte.
%Vor%Wenn Sie in "Mitte" einer Warteschlange einfügen möchten, suchen Sie möglicherweise nach einer "Prioritätswarteschlange".
Leider ist das keine integrierte .Net-Klasse, AFAIK. Aber jetzt hast du wenigstens einen Konzeptnamen, nach dem du suchen kannst.
Sehen Sie sich diese (geschlossene) Frage & Antwort für einige möglicherweise nützliche Links an:
Prioritätswarteschlange in .Net
Zitat aus der Frage:
Prioritätswarteschlangen sind Datenstrukturen, die mehr Flexibilität als einfache Sortierung bieten, da sie es neuen Elementen ermöglichen, in beliebigen Intervallen in ein System einzutreten. Es ist viel kostengünstiger, einen neuen Job in eine Prioritätswarteschlange einzufügen, als alles bei jeder solchen Ankunft neu zu sortieren.
Die Basis-Prioritätswarteschlange unterstützt drei primäre Operationen:
- Einfügen (Q, x). Gegeben ein Element x mit Schlüssel k, fügen Sie es in die Prioritätswarteschlange Q.
ein- Finde-Minimum (Q). Geben Sie einen Zeiger auf das Element zurück Der Schlüsselwert ist kleiner als jeder andere Schlüssel in der Prioritätswarteschlange Q.
- Löschen-Minimum (Q). Entfernen Sie das Element aus der Prioritätswarteschlange Q, deren Schlüssel mindestens
ist