Liste (entiers seulement)

La classe Liste vue en classe (version se limitant à des entiers) était essentiellement comme suit. Il se peut qu'il y ait de petites variations d'un groupe à l'autre :

using System;
using System.Collections.Generic;

namespace z
{
   class ListeVideException : Exception { }
   class Liste
   {
      class Noeud
      {
         public int Valeur { get; }
         public Noeud Succ { get; set; } = null; // successeur
         public Noeud(int valeur)
         {
            Valeur = valeur;
         }
      }
      private Noeud Tête { get; set; } = null;
      public bool EstVide { get => Tête == null; }
      private Noeud Dernier { get; set; } = null;
      public int Length { get; private set; } = 0;
      public Liste()
      {
      }
      public void Add(int valeur)
      {
         if (EstVide)
         {
            // Tête = Dernier = new Noeud(valeur);
            Tête = new Noeud(valeur);
            Dernier = Tête;
         }
         else
         {
            // Dernier = Dernier.Succ = new Noeud(valeur);
            Dernier.Succ = new Noeud(valeur);
            Dernier = Dernier.Succ;
         }
         ++Length;
      }
      public void RemoveFront()
      {
         if (EstVide) throw new ListeVideException();
         Tête = Tête.Succ;
         if (EstVide)
            Dernier = null;
         --Length;
      }
      public void Afficher() // bof
      {
         for (Noeud p = Tête; p != null; p = p.Succ)
            Console.Write($"{p.Valeur} ");
      }
      public int Count(int valeur)
      {
         int n = 0;
         for (Noeud p = Tête; p != null; p = p.Succ)
            if(valeur == p.Valeur)
               ++n;
         return n;
      }
      public bool Contains(int valeur)
      {
         for (Noeud p = Tête; p != null; p = p.Succ)
            if (valeur == p.Valeur)
               return true;
         return false;
      }
      public static Liste Dupliquer(Liste lst)
      {
         Liste résultat = new Liste();
         for (Noeud p = lst.Tête; p != null; p = p.Succ)
            résultat.Add(p.Valeur);
         return résultat;
      }
   }
   class Program
   {
      static void Main(string[] args)
      {
         Liste lst = new Liste();
         if (!lst.EstVide)
            Console.WriteLine("Oups!");
         int[] vals = new[] { 2, 3, 5, 7, 11, 2, 2, 4, 2 };
         foreach (int n in vals)
            lst.Add(n);
         lst.Afficher();
         Console.WriteLine($" : {lst.Length} éléments");
         Console.WriteLine($"Nombre d'occurrences de 2 : {lst.Count(2)}");
         Liste autre = Liste.Dupliquer(lst);
         while(!lst.EstVide)
         {
            lst.RemoveFront();
            lst.Afficher();
            Console.WriteLine();
         }
         Console.Write("Ma copie de lst contient : ");
         autre.Afficher();
         Console.WriteLine();
      }
   }
}

Voilà!


Valid XHTML 1.0 Transitional

CSS Valide !