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: