Wie kann ich Elemente in eine Warteschlange in C # einfügen?

7

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?

    
Bastien Vandamme 30.10.2009, 19:22
quelle

6 Antworten

26

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.

    
Pavel Minaev 30.10.2009, 19:24
quelle
15

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.

    
Jess 30.10.2009 19:25
quelle
4

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%     
Anthony Nichols 04.01.2017 20:52
quelle
2

Der Punkt einer Warteschlange besteht darin, eine FIFO-Schnittstellenabstraktion (first-in-first-out) bereitzustellen. Wenn Sie in der Lage sein möchten, mit Ihrer Datenstruktur nicht queueweise zu interagieren, verwenden Sie keine Warteschlange.

    
Matt Ball 30.10.2009 19:25
quelle
1

Sie müssen wahrscheinlich eine Liste verwenden.

    
epotter 30.10.2009 19:23
quelle
0

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   
    
ToolmakerSteve 21.02.2018 04:32
quelle

Tags und Links