C#-Stack mit Push- und Pop-Beispielen

โšก Intelligente Zusammenfassung

Ein Stack in C# ist eine Sammlung aus dem Namespace System.Collections, die dem LIFO-Prinzip (Last In, First Out) folgt. Die Push-Methode fรผgt ein Element oben hinzu, die Pop-Methode entfernt es.

  • ๐Ÿ“š LIFO-Konzept: Ein Stapel funktioniert wie ein Bรผcherstapel, daher wird das zuletzt hinzugefรผgte Element als erstes wieder entfernt.
  • โž• Drรผcken und Pop: Die Push-Methode fรผgt ein Element oben auf den Stapel hinzu, und die Pop-Methode entfernt und gibt dieses oberste Element zurรผck.
  • ๐Ÿ‘€ Schauen, Zรคhlen, Enthรคlt: Die Peek-Methode liest das oberste Element, ohne es zu entfernen, wรคhrend Count und Contains GrรถรŸe und Zugehรถrigkeit ausgeben.
  • ๐Ÿงช Durchgerechnete Beispiele: Zwei Konsolenprogramme demonstrieren Push mit Count und Contains, dann Pop, sodass Sie trace die LIFO-Reihenfolge.
  • ๏ธ Generischer Stack: Der Stapel Die Klasse in System.Collections.Generic fรผgt Kompilierzeit-Typsicherheit hinzu und vermeidet Boxing fรผr neuen C#-Code.
  • ๐Ÿค– KI-Unterstรผtzung: GitHub Copilot generiert Stack-Operationen in C#, und ML.NET liest Daten รผber typisierte Sammlungen anstatt รผber einen nicht-generischen Stack.

C#-Stack

Was ist Stack in C#?

Der Stapel ist eine Sonderfallsammlung, die ein Last-In-First-Out-Konzept (LIFO) darstellt. Um LIFO zunรคchst zu verstehen, nehmen wir ein Beispiel. Stellen Sie sich einen Stapel Bรผcher vor, wobei jedes Buch รผbereinander liegt.

Das Prinzip โ€žLast in first outโ€œ bei Bรผchern bedeutet, dass nur das oberste Buch aus dem Bรผcherstapel entnommen werden kann. Es ist nicht mรถglich, ein Buch dazwischen zu entnehmen, da dies die Ausrichtung des Stapels stรถren wรผrde.

Also in C#funktioniert der Stapel auf die gleiche Weise. Elemente werden dem Stapel รผbereinander hinzugefรผgt. Der Vorgang des Hinzufรผgens eines Elements zum Stapel wird als Push-Operation bezeichnet. Um ein Element aus einem Stapel zu entfernen, kรถnnen Sie auch das oberste Element des Stapels entfernen. Diese Operation wird als Pop bezeichnet.

Sehen wir uns die fรผr die Stack-Sammlung verfรผgbaren Operationen genauer an.

Deklaration des Stapels

Mit Hilfe des Stack-Datentyps wird ein Stack erstellt. Das Schlรผsselwort โ€žnewโ€œ wird verwendet, um ein Objekt eines Stacks zu erstellen. Das Objekt wird dann der Variablen st zugewiesen.

Stack st = new Stack()

Elemente zum Stapel hinzufรผgen

Die Push-Methode wird verwendet, um ein Element zum Stapel hinzuzufรผgen. Die allgemeine Syntax der Anweisung ist unten angegeben.

Stack.push(element)

Elemente aus dem Stapel entfernen

Die Pop-Methode wird verwendet, um ein Element vom Stapel zu entfernen. Die Pop-Operation gibt das oberste Element des Stapels zurรผck. Die allgemeine Syntax der Anweisung ist unten angegeben

 Stack.pop()

Zu Zรคhlen

Diese Eigenschaft wird verwendet, um die Anzahl der Elemente im Stapel abzurufen. Nachfolgend finden Sie die allgemeine Syntax dieser Anweisung.

Stack.Count

Enthรคlt

Diese Methode wird verwendet, um festzustellen, ob ein Element im Stack vorhanden ist. Nachfolgend finden Sie die allgemeine Syntax dieser Anweisung. Die Anweisung gibt โ€žtrueโ€œ zurรผck, wenn das Element existiert, andernfalls gibt sie den Wert โ€žfalseโ€œ zurรผck.

Stack.Contains(element)

Sehen wir uns nun an, wie dies auf Codeebene funktioniert. Der gesamte unten genannte Code wird in unsere geschrieben Konsolenanwendung. Der Code wird in unsere Program.cs-Datei geschrieben.

Im folgenden Programm schreiben wir den Code, um zu sehen, wie wir die oben genannten Methoden verwenden kรถnnen.

Beispiel 1: Stack.Push()-Methode

In diesem Beispiel werden wir sehen

  • Wie ein Stapel erstellt wird.
  • So zeigen Sie die Elemente des Stapels an und verwenden die Methoden Count und Contain.

Stapeln in C#

using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace DemoApplication
{
 class Program
 {
  static void Main(string[] args)
  {
   Stack st = new Stack();
   st.Push(1);
   st.Push(2);
   st.Push(3);

   foreach (Object obj in st)
   {
    Console.WriteLine(obj);
   }
    Console.WriteLine(); Console.WriteLine();
    Console.WriteLine("The number of elements in the stack " +st.Count);
    Console.WriteLine("Does the stack contain the elements 3 "+st.Contains(3));
    Console.ReadKey();
  }
 }
}

Code Erlรคuterung:-

  1. Der erste Schritt dient der Deklaration des Stacks. Hier deklarieren wir โ€žstโ€œ als Variable, um die Elemente unseres Stapels zu speichern.
  2. Als nรคchstes fรผgen wir 3 Elemente zu unserem Stapel hinzu. Jedes Element wird รผber die Push-Methode hinzugefรผgt.
  3. Da auf die Stapelelemente nicht รผber die Indexposition zugegriffen werden kann, ist dies nicht der Fall Anordnungsliste, mรผssen wir einen anderen Ansatz verwenden, um die Elemente des Stapels anzuzeigen. Das Objekt (obj) ist eine temporรคre Variable, die zum Halten jedes Elements des Stapels deklariert wird. AnschlieรŸend verwenden wir die foreach-Anweisung, um jedes Element des Stapels durchzugehen. Fรผr jedes Stapelelement wird der Wert der Variablen obj zugewiesen. AnschlieรŸend verwenden wir den Befehl Console.Writeline, um den Wert auf der Konsole anzuzeigen.
  4. Wir verwenden die Count-Eigenschaft (st.count), um die Anzahl der Elemente im Stapel zu ermitteln. Diese Eigenschaft gibt eine Zahl zurรผck. Diesen Wert zeigen wir dann auf der Konsole an.
  5. AnschlieรŸend verwenden wir die Methode โ€žContainsโ€œ, um zu prรผfen, ob der Wert 3 in unserem Stapel vorhanden ist. Dies gibt entweder einen wahren oder einen falschen Wert zurรผck. Diesen Rรผckgabewert zeigen wir dann auf der Konsole an.

Wenn der obige Code richtig eingegeben und das Programm ausgefรผhrt wird, wird die folgende Ausgabe angezeigt.

Ausgang:

Stapeln in C#

Aus der Ausgabe kรถnnen wir ersehen, dass die Elemente des Stapels angezeigt werden. AuรŸerdem wird der Wert True angezeigt, um anzuzeigen, dass der Wert 3 auf dem Stapel definiert ist.

Hinweis: Sie haben bemerkt, dass das letzte auf den Stapel geschobene Element zuerst angezeigt wird. Dies ist das oberste Element des Stapels. Die Anzahl der Stapelelemente wird auch in der Ausgabe angezeigt.

Beispiel 2: Stack.Pop()-Methode

Schauen wir uns nun die Funktion โ€žEntfernenโ€œ an. Wir werden den Code sehen, der erforderlich ist, um das oberste Element vom Stapel zu entfernen.

Stapeln in C#

using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace DemoApplication
{
 class Program
 {
  static void Main(string[] args)
  {
   Stack st = new Stack();
   st.Push(1);
   st.Push(2);
   st.Push(3);
   
   st.Pop();

   foreach (Object obj in st)
   {
    Console.WriteLine(obj);
   }
    Console.ReadKey();
  }
 }
}

Code Erlรคuterung:-

  1. Hier geben wir lediglich die Pop-Methode aus, mit der ein Element aus dem Stapel entfernt wird.

Wenn der obige Code richtig eingegeben und das Programm ausgefรผhrt wird, wird die folgende Ausgabe angezeigt.

Ausgang:

Stapeln in C#

Wir kรถnnen sehen, dass das Element 3 vom Stapel entfernt wurde.

C# Stack Peek() Methode

Die Methoden `Push` und `Pop` arbeiten mit dem obersten Element des Stapels. Manchmal mรถchte man sich aber nur das oberste Element ansehen, ohne es zu entfernen. Die Methode `Peek` macht genau das. Sie gibt den obersten Wert des Stapels zurรผck, ohne die Sammlung zu verรคndern. Das ist nรผtzlich, wenn man das nรคchste Element prรผfen mรถchte, bevor man es entfernt.

Schritt 1) Erstelle einen Stapel und lege drei Elemente darauf, sodass der Wert 3 ganz oben liegt.

Schritt 2) Rufen Sie die Peek-Methode auf, um das oberste Element zu lesen, und รผberprรผfen Sie dann die Count-Eigenschaft, um sicherzustellen, dass nichts entfernt wurde.

using System;
using System.Collections;

namespace DemoApplication
{
 class Program
 {
  static void Main(string[] args)
  {
   Stack st = new Stack();
   st.Push(1);
   st.Push(2);
   st.Push(3);
   Console.WriteLine(st.Peek());
   Console.WriteLine(st.Count);
   Console.ReadKey();
  }
 }
}

Code Erlรคuterung:-

  1. Es wird ein Stack namens st deklariert, und die Werte 1, 2 und 3 werden mit der Push-Methode hinzugefรผgt, sodass 3 das oberste Element wird.
  2. Die Peek-Methode gibt das oberste Element zurรผck, ohne es zu entfernen, und die Count-Eigenschaft gibt weiterhin die volle Anzahl der Elemente im Stapel an.

Wenn das Programm ausgefรผhrt wird, gibt es den Wert aus. 3 von Peek und dann die Zรคhlung 3Dies beweist, dass das Element auf dem Stapel verbleibt. Ist der Stapel leer, lรถst Peek eine Ungรผltigkeitsausnahme aus.OperationException, daher ist es sicher, Count vor dem Aufruf zu รผberprรผfen.

Generischer Stack in C#

Die obigen Beispiele verwenden die nicht-generische Stack-Klasse aus System.Collections, die jedes Element als Objekt speichert. Moderner C#-Code bevorzugt รผblicherweise den generischen Stack. Klasse aus dem Namespace System.Collections.Generic. Sie bindet den Stack an einen einzigen deklarierten Typ, sodass der Compiler jeden Push- und Pop-Vorgang prรผft und kein Casting oder Boxing erforderlich ist.

Die wichtigsten Vorteile des generischen Stacks sind unten aufgefรผhrt.

  • Typensicherheit: Der Typ wird bei der Deklaration festgelegt, sodass nur Werte dieses Typs รผbertragen werden kรถnnen und Fehler zur Kompilierzeit abgefangen werden.
  • Kein Boxen: Werttypen wie int werden direkt gespeichert, wodurch die Kosten fรผr das Boxing vermieden werden, die beim nicht-generischen Stack anfallen.
  • Reinigungskraft liest: Pop und Peek geben den deklarierten Typ direkt zurรผck, sodass Sie das Ergebnis nicht von object zurรผckcasten mรผssen.
using System;
using System.Collections.Generic;

namespace DemoApplication
{
 class Program
 {
  static void Main(string[] args)
  {
   Stack<string> st = new Stack<string>();
   st.Push("Java");
   st.Push("Python");
   Console.WriteLine(st.Pop());
   Console.ReadKey();
  }
 }
}

In diesem Beispiel wird der Stack als Stack deklariert. Daher akzeptiert es nur Zeichenkettenwerte. Die Pop-Methode gibt direkt eine Zeichenkette zurรผck und gibt sie aus. PythonDer zuletzt รผbertragene Wert. Fรผr jedes neue Projekt gilt der generische Stack. ist die empfohlene Wahl.

Unterschied zwischen Stack und Queue in C#

Ein Stapel und ein Warteschlange Beide Datentypen steuern die Reihenfolge, in der Elemente entfernt werden, verwenden aber gegensรคtzliche Regeln. Ein Stack arbeitet nach dem LIFO-Prinzip (Last In, First Out), eine Queue nach dem FIFO-Prinzip (First In, First Out). Die Wahl des richtigen Datentyps macht die Intention Ihres Codes fรผr andere Entwickler verstรคndlich.

Die wichtigsten Unterschiede sind im Folgenden aufgefรผhrt:

  • Auftrag: Bei einem Stapel wird das zuletzt hinzugefรผgte Element zuerst entfernt (LIFO), bei einer Warteschlange das รคlteste Element zuerst (FIFO).
  • Methods: Ein Stapel verwendet Push und Pop, wรคhrend eine Warteschlange Enqueue zum Hinzufรผgen und Dequeue zum Entfernen verwendet.
  • Zugriff auf das oberste Element: Ein Stapel liest sein nรคchstes Element mit Peek, und eine Warteschlange liest ihr nรคchstes Element mit Peek von vorne.
  • Typische Anwendungen: Stacks passen zu Undo-Funktionen, Auswertung von Ausdrรผcken und Rekursion tracKรถnig, wรคhrend Warteschlangen fรผr Scheduling, Pufferung und Breitensuche geeignet sind.

Beide Typen sind in generischer Form als Stack verfรผgbar. und Warteschlange in System.Collections.Generic, sodass Sie mit beiden Optionen Typsicherheit erhalten.

Hรคufig gestellte Fragen

Der Aufruf von Pop oder Peek auf einem leeren Stack lรถst eine Invalid-Ausnahme aus.OperationException. รœberprรผfen Sie zuerst die Count-Eigenschaft oder verwenden Sie die generischen Stack-Methoden TryPop und TryPeek, die false zurรผckgeben, anstatt eine Ausnahme auszulรถsen, wenn der Stack keine Elemente enthรคlt.

Push und Pop haben beide eine konstante Laufzeit von O(1), da sie nur auf das oberste Element des Stacks zugreifen. Wenn das interne Array vergrรถรŸert werden muss, wird es gelegentlich durch ein Push vergrรถรŸert, die durchschnittlichen Kosten pro Operation bleiben jedoch konstant.

Nein. Ein Stack gibt nur sein oberstes Element รผber Peek und Pop preis, er hat also keinen Indexzugriff wie eine Liste. Um alle Werte zu lesen, durchlaufen Sie den Stack mit einer foreach-Schleife oder kopieren Sie ihn mit der ToArray-Methode.

Die Methode `Clear` entfernt alle Elemente vom Stapel mit einem einzigen Aufruf und setzt `Count` auf null zurรผck. Um stattdessen Elemente einzeln vom Stapel zu entfernen, rufen Sie `Pop` in einer Schleife auf, bis `Count` null erreicht.

Die Standard-Stack-Klasse ist nicht threadsicher, wenn mehrere Threads gleichzeitig auf sie zugreifen. Verwenden Sie fรผr den gleichzeitigen Zugriff ConcurrentStack aus System.Collections.Concurrent, das atomare TryPush- und TryPop-Methoden ohne externe Sperren bietet.

Rufen Sie die Methode `ToArray` auf, um den Stack in ein neues Array zu kopieren, sortiert von oben nach unten. Sie kรถnnen den Stack auch an den Konstruktor einer Liste รผbergeben, um eine generische Liste zu erstellen.ping die gleiche Reihenfolge.

Ja. GitHub Copilot generiert Stack-Deklarationen, Push- und Pop-Aufrufe sowie foreach-Schleifen anhand eines kurzen Kommentars oder Methodennamens. Hรคufig wird die generische Stack-Version vorgeschlagen, da dies die empfohlene Vorgehensweise fรผr neuen C#-Code ist.

Stacks speichern selten ML.NET-Trainingsdaten, die durch typisierte Sammlungen und die IDataView-Pipeline flieรŸen. Das LIFO-Stack-Konzept findet sich jedoch in Machine-Learning-Algorithmen fรผr Backend-Operationen wieder.tracKรถnig, Tiefensuche und Verwaltung rekursiver Methodenaufrufe.

Fassen Sie diesen Beitrag mit folgenden Worten zusammen: