Pile C# avec exemples Push & Pop

⚡ Résumé intelligent

En C#, une pile est une collection de l'espace de noms System.Collections qui suit le principe du dernier entré, premier sorti (LIFO), où la méthode Push ajoute un élément au sommet et la méthode Pop le supprime.

  • 📚 Concept LIFO : Une pile fonctionne comme une pile de livres : le dernier élément ajouté est le premier retiré.
  • ➕ Pousser et éclater : La méthode Push ajoute un élément au sommet de la pile, et la méthode Pop supprime et renvoie cet élément situé au sommet.
  • 👀 Regardez, comptez, contient : La méthode Peek lit l'élément supérieur sans le supprimer, tandis que Count et Contains indiquent la taille et l'appartenance.
  • 🧪 Exemples résolus : Deux programmes en console illustrent la méthode Push avec Count et Contains, puis Pop, afin que vous puissiez tracet l'ordre LIFO.
  • ️ Pile générique : La pile La classe dans System.Collections.Generic ajoute une sécurité de type à la compilation et évite l'encapsulation pour le nouveau code C#.
  • 🤖 Aide à l'IA : GitHub Copilot génère les opérations de pile C#, et ML.NET lit les données via des collections typées au lieu d'une pile non générique.

Pile C#

Qu’est-ce que Stack en C# ?

La pile est une collection de cas particuliers qui représente un concept du dernier entré, premier sorti (LIFO). Pour d’abord comprendre LIFO, prenons un exemple. Imaginez une pile de livres, chaque livre étant superposé.

Le concept du dernier entré, premier sorti dans le cas des livres signifie que seul le livre le plus haut peut être retiré de la pile de livres. Il n'est pas possible de retirer un livre entre les deux, car cela perturberait le positionnement de la pile.

Donc dans C#, la pile fonctionne également de la même manière. Les éléments sont ajoutés à la pile, les uns sur les autres. Le processus d’ajout d’un élément à la pile est appelé opération push. Pour supprimer un élément d'une pile, vous pouvez également supprimer l'élément le plus haut de la pile. Cette opération est connue sous le nom de pop.

Examinons plus en détail les opérations disponibles pour la collection Stack.

Déclaration de la pile

Une pile est créée à l'aide du type Stack Data. Le mot clé « new » est utilisé pour créer un objet d’une Stack. L'objet est ensuite affecté à la variable st.

Stack st = new Stack()

Ajout d'éléments à la pile

La méthode push est utilisée pour ajouter un élément sur la pile. La syntaxe générale de l'instruction est donnée ci-dessous.

Stack.push(element)

Supprimer des éléments de la pile

La méthode pop est utilisée pour supprimer un élément de la pile. L'opération pop renverra l'élément le plus haut de la pile. La syntaxe générale de l'instruction est donnée ci-dessous

 Stack.pop()

que vous avez

Cette propriété est utilisée pour obtenir le nombre d'éléments dans la pile. Vous trouverez ci-dessous la syntaxe générale de cette instruction.

Stack.Count

Inclus

Cette méthode est utilisée pour voir si un élément est présent dans la Stack. Vous trouverez ci-dessous la syntaxe générale de cette instruction. L'instruction renverra vrai si l'élément existe, sinon elle renverra la valeur faux.

Stack.Contains(element)

Voyons maintenant que cela fonctionne au niveau du code. Tout le code mentionné ci-dessous sera écrit dans notre Application console. Le code sera écrit dans notre fichier Program.cs.

Dans le programme ci-dessous, nous écrirons le code pour voir comment nous pouvons utiliser les méthodes mentionnées ci-dessus.

Exemple 1 : méthode Stack.Push()

Dans cet exemple, nous verrons

  • Comment une pile est créée.
  • Comment afficher les éléments de la pile, et utiliser les méthodes Count et Contain.

Pile en 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 Explication:-

  1. La première étape permet de déclarer la Stack. Ici, nous déclarons « st » comme variable pour contenir les éléments de notre pile.
  2. Ensuite, nous ajoutons 3 éléments à notre pile. Chaque élément est ajouté via la méthode Push.
  3. Maintenant, puisque les éléments de la pile ne sont pas accessibles via la position d'index comme le liste des tableaux, nous devons utiliser une approche différente pour afficher les éléments de la pile. L'objet (obj) est une variable temporaire, déclarée pour contenir chaque élément de la pile. Nous utilisons ensuite l'instruction foreach pour parcourir chaque élément de la pile. Pour chaque élément de pile, la valeur est attribuée à la variable obj. Nous utilisons ensuite la commande Console.Writeline pour afficher la valeur sur la console.
  4. Nous utilisons la propriété Count (st.count) pour obtenir le nombre d'éléments dans la pile. Cette propriété renverra un numéro. Nous affichons ensuite cette valeur à la console.
  5. Nous utilisons ensuite la méthode Contains pour voir si la valeur 3 est présente dans notre pile. Cela renverra une valeur vraie ou fausse. Nous affichons ensuite cette valeur de retour à la console.

Si le code ci-dessus est entré correctement et que le programme est exécuté, la sortie suivante sera affichée.

Sortie :

Pile en C#

À partir du résultat, nous pouvons voir que les éléments de la pile sont affichés. De plus, la valeur True est affichée pour indiquer que la valeur 3 est définie sur la pile.

Note: Vous avez remarqué que le dernier élément poussé sur la pile est affiché en premier. Il s'agit de l'élément le plus haut de la pile. Le nombre d'éléments de pile est également affiché dans la sortie.

Exemple 2 : méthode Stack.Pop()

Examinons maintenant la fonctionnalité « supprimer ». Nous verrons le code requis pour supprimer l'élément le plus haut de la pile.

Pile en 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 Explication:-

  1. Ici, nous émettons simplement la méthode pop qui est utilisée pour supprimer un élément de la pile.

Si le code ci-dessus est saisi correctement et que le programme est exécuté, la sortie suivante sera affichée.

Sortie :

Pile en C#

On voit que l'élément 3 a été supprimé de la pile.

Méthode Stack Peek() de C#

Les méthodes Push et Pop agissent sur l'élément en haut de la pile, mais il arrive qu'on ait seulement besoin de consulter cet élément sans le supprimer. La méthode Peek fait exactement cela. Elle renvoie la valeur la plus haute de la pile tout en laissant la collection inchangée, ce qui est pratique pour tester l'élément suivant avant de le dépiler.

Étape 1) Créez une pile et empilez-y trois éléments, de sorte que la valeur 3 se trouve au-dessus.

Étape 2) Appelez la méthode Peek pour lire l'élément supérieur, puis vérifiez la propriété Count pour confirmer qu'aucun élément n'a été supprimé.

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 Explication:-

  1. Une pile nommée st est déclarée, et les valeurs 1, 2 et 3 sont ajoutées avec la méthode Push, de sorte que 3 devient l'élément le plus haut.
  2. La méthode Peek renvoie l'élément du dessus sans le supprimer, et la propriété Count indique toujours le nombre total d'éléments dans la pile.

Lorsque le programme s'exécute, il affiche la valeur 3 de Peek puis le compte 3ce qui prouve que l'élément reste sur la pile. Si la pile est vide, Peek lève une exception InvalidOperationException, il est donc prudent de vérifier Count avant d'appeler la fonction.

Pile générique en C#

Les exemples ci-dessus utilisent la classe Stack non générique de System.Collections, qui stocke chaque élément sous forme d'objet. Le code C# moderne privilégie généralement la classe Stack générique. Classe de l'espace de noms System.Collections.Generic. Elle lie la pile à un seul type déclaré, de sorte que le compilateur vérifie chaque opération Push et Pop et qu'aucun transtypage ni box n'est nécessaire.

Les principaux avantages de la pile générique sont énumérées ci-dessous.

  • Sécurité du type : Le type est fixé lors de la déclaration, donc seules les valeurs de ce type peuvent être insérées, et les erreurs sont détectées à la compilation.
  • Pas de boxe : Les types valeur tels que int sont stockés directement, ce qui évite le coût d'encapsulation que supporte la pile non générique.
  • Le nettoyeur lit : Pop et Peek renvoient directement le type déclaré, vous n'avez donc pas besoin de reconvertir le résultat à partir de l'objet.
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();
  }
 }
}

Dans cet exemple, la pile est déclarée comme Stack Elle n'accepte donc que des valeurs de type chaîne de caractères. La méthode Pop renvoie directement une chaîne de caractères et l'affiche. Python, la dernière valeur transmise. Pour tout nouveau projet, la pile générique est le choix recommandé.

Différence entre une pile et une file d'attente en C#

Une pile et un file Les piles et les files d'attente contrôlent toutes deux l'ordre de suppression des éléments, mais selon des règles opposées. Une pile fonctionne selon le principe « dernier entré, premier sorti », tandis qu'une file d'attente fonctionne selon le principe « premier entré, premier sorti ». Choisir la bonne méthode permet aux autres développeurs de comprendre clairement l'intention de votre code.

Les principales différences sont énumérées ci-dessous :

  • Commande: Une pile retire d'abord l'élément ajouté le plus récemment (LIFO), tandis qu'une file d'attente retire d'abord l'élément le plus ancien (FIFO).
  • Méthodologie: Une pile utilise les opérations Push et Pop, tandis qu'une file d'attente utilise les opérations Enqueue pour ajouter et Dequeue pour retirer.
  • Accès à l'élément supérieur : Une pile lit son élément suivant avec Peek, et une file d'attente lit son élément suivant avec Peek depuis le début.
  • Utilisations typiques: Les piles s'adaptent aux fonctionnalités d'annulation, à l'évaluation d'expressions et à la récursivité. tracroi, tandis que les files d'attente s'adaptent à la planification, à la mise en mémoire tampon et au parcours en largeur.

Les deux types sont disponibles sous forme générique sous le nom de Stack. et file d'attente dans System.Collections.Generic, vous bénéficiez donc d'une sécurité de type quel que soit votre choix.

FAQ

Appeler Pop ou Peek sur une pile vide lève une exception InvalidOperaException tionException. Vérifiez d'abord la propriété Count, ou utilisez les méthodes génériques Stack TryPop et TryPeek, qui renvoient false au lieu de lever une exception lorsque la pile ne contient aucun élément.

Les opérations Push et Pop s'exécutent en temps constant O(1) car elles ne modifient que le sommet de la pile. Lorsque la taille du tableau interne doit augmenter, un appel ponctuel à Push la redimensionne, mais le coût moyen par opération reste constant.

Non. Une pile n'expose que son sommet via les fonctions Peek et Pop ; elle ne possède donc pas d'index comme une liste. Pour lire chaque valeur, parcourez la pile avec une boucle foreach ou copiez-la à l'aide de la méthode ToArray.

La méthode Clear supprime tous les éléments de la pile en une seule opération et réinitialise Count à zéro. Pour supprimer les éléments un par un en partant du haut de la pile, appelez Pop dans une boucle jusqu'à ce que Count atteigne zéro.

La classe Stack standard n'est pas sûre en écriture lorsque plusieurs threads la modifient simultanément. Pour un accès concurrent, utilisez ConcurrentStack de System.Collections.Concurrent, qui propose des méthodes atomiques TryPush et TryPop sans verrou externe.

Appelez la méthode ToArray pour copier la pile dans un nouveau tableau, triée de haut en bas. Vous pouvez également passer la pile au constructeur List pour créer une liste générique tout en conservant la pile.ping le même ordre.

Oui. GitHub Copilot génère les déclarations de pile, les appels à `Push` et `Pop`, ainsi que les boucles `foreach` à partir d'un court commentaire ou d'un nom de méthode. Il suggère fréquemment la version générique de la pile, car il s'agit de la collection recommandée pour le nouveau code C#.

Les piles stockent rarement les données d'entraînement ML.NET, qui circulent via des collections typées et le pipeline IDataView. Cependant, le concept de pile LIFO apparaît dans les algorithmes d'apprentissage automatique pour la gestion des données.tracroi, recherche en profondeur d'abord et gestion des appels de méthodes récursives.

Résumez cet article avec :