Liste chaînée c sharp

Résolu
bab2526 Messages postés 7 Date d'inscription vendredi 22 août 2008 Statut Membre Dernière intervention 21 décembre 2009 - 8 déc. 2009 à 11:28
bab2526 Messages postés 7 Date d'inscription vendredi 22 août 2008 Statut Membre Dernière intervention 21 décembre 2009 - 8 déc. 2009 à 14:43
Bonjour à tous.
Je suis une totale débutante en C#, débutante en développement.
Je dois faire une liste chaînée (hier, je ne savais même pas que ça existait !), je ne sais pas par où commencer.
Quelqu'un peut-il m'aider (sans me donner un lien du type http://www.csharpfr.com/forum/sujet-CSHARP-LISTE-CHAINEE_733638.aspx que je n'ai pas su utiliser) ?

Merci.

5 réponses

krimog Messages postés 1860 Date d'inscription lundi 28 novembre 2005 Statut Membre Dernière intervention 14 février 2015 49
8 déc. 2009 à 11:52
Salut

Tout d'abord, sache qu'il existe la classe List<TonType> qui marche très bien :

// Création
List maListe = new List();

// Ajout d'élément
maListe.Add(10);

// Connaître le nombre d'élements
int nb = maListe.Count;

// Lire un élément
int monElement = maListe[0];

// Parcourir ta liste avec for
for (int i = 0; i < maListe.Count; i++)
{
    Console.WriteLine(maListe[i].ToString());
}

// Parcourir ta liste avec foreach
foreach (int monElement in maListe)
{
    Console.WriteLine(monElement);
}


Bon, je ne vais pas non plus te détailler tous les membres de la classe. MSDN est là pour ça.

Si cependant tu souhaites faire toi-même ta liste chainée, tu peux faire un truc du genre :
class Maillon
{
    private Maillon _suivant = null;
    private object _donnees = null;

    public Maillon Suivant
    {
        get { return _suivant; }
        set { _suivant = value; }
    }
    public object Donnees
    {
        get { return _donnees; }
        set { _donnees = value; }
    }
}

class ListeChainee
{
    private Maillon _ancre = null;

    public void AjouterEnDebutDeChaine(object valeur)
    {
        Maillon m = new Maillon();
        m.Donnees = valeur;
        m.Suivant = _ancre;
        _ancre = m;
    }

    public int Compter()
    {
        Maillon m = _ancre;
        int i;
        for (i = 0; m != null; i++) m = m.Suivant;
        return i;
    }

    public object RecupererValeur(int n)
    {
        Maillon m = _ancre;
        for (int i = 0; i < n; i++)
        {
            if(m !null) m m.Suivant;
            else break;
        }
        if(m == null) throw new IndexOutOfRangeException();
        return m.Donnees;
    }
}


Bien sûr, il faut bien maîtriser le concept des listes chainées et celui des références (puisque les pointeurs ne sont pas présents en C#).

Krimog : while (!(succeed = try())) ;
- Nous ne sommes pas des décodeurs ambulants. Le style SMS est prohibé ! -
4
Rejoignez-nous