Liste chainee circulaire

mohammed -  
Dalfab Messages postés 638 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,
je cherche les algorithmed d'ajout et suppression et parcours de la liste chainee circulaire(n'est pas doublement chainee);svp aidez moi!!!

1 réponse

  1. Dalfab Messages postés 638 Date d'inscription   Statut Membre Dernière intervention   102
     
    Bonjour,
    Les circulaires simplement chaînées sont les plus simples en C. Il suffit mémoriser le dernier élément pour gérer la liste car le premier est le suivant du dernier.
    struct Noeud {
       int  x;
       struct Noeud *pSuivant;
    };
    struct Liste {
       struct Noeud  *pDernier;
    };
    struct Noeud* dernier( struct Liste lst ) {
       return lst.pDernier;
    }
    struct Noeud* premier( struct Liste lst ) {
       return lst.pDernier ? lst.pDernier->pSuivant : NULL;
    }
    bool estVide( struct Liste lst ) {
       return lst.pDernier == NULL;
    }

    Pour insérer un item
    si la liste est vide:
       pItem->pSuivant = pItem;  // seul donc suit lui-même
       lst.pDernier = pItem;     // devient le dernier et aussi le premier
    si la liste n'est pas vide, en appelant pPrecedent un élément de la liste
       pItem->pSuivant = pPrecedent->pSuivant;
       pPrecedent->pSuivant = pItem;
       if (lst.pDernier==pPrecedent) lst.pDernier = pItem; // devient dernier

    Pour parcourir ... ... Le suivant s'appelle pSuivant et le dernier pDernier.

    Pour supprimer, il faut trouver l'élément tel que pItem->pSuivant == pElementASupprimer et remplacer son suivant et peut-être mettre à jour lst.pDernier.
    0