Lire une lise chainée simple à l'envers

Résolu
didy_gwatinik Messages postés 358 Statut Membre -  
mrism000 Messages postés 34 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,
Est-il possible de parcourir un liste chainée simple à l'envers pour afficher les saisies dans l'ordre inverse? Je vois pas trop comment je pourrai faire?
Configuration: Windows XP
Firefox 3.0.3

6 réponses

  1. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
     
    Salut,

    Pour lire une liste simplement chaînée à l'envers tu crées une fonction InsertionEnTete (donc chaque nouveau élément sera insérer en tête de liste)

    Liste initiale : elem1, elem2,...................,elemN

    Insertion de 1er élément en tête - La nouvelle liste sera elem1
    Insertion de 2ème élément en tête - La nouvelle liste sera elem2, elem1

    Insertion de Nième élément en tête - La nouvelle liste sera elemN ..................elem2, elem1
    Liste *p;
    Liste *L1;
    Liste *L2;
    
    for(p=L1;p!=NULL;p=p->suivant)
      InsertionEnTete(L2,p->donnee);
    
    2
  2. LeYaude Messages postés 307 Statut Membre 46
     
    Ne connaissant pas le C et donc n'ayant aucune idée de l'implémentation des liste chainées dans ce langage, ni si les listes chainées doubles sont faciles à utiliser (ça semblerait assez pratique ici en même temps)
    1
    1. didy_gwatinik Messages postés 358 Statut Membre 80
       
      J'ai essayé ça marche parfaitement bien! Merci beaucoup beaucoup!!!
      0
    2. mrism000 Messages postés 34 Date d'inscription   Statut Membre Dernière intervention  
       
      didy_gwatinik tu peux ecrire le code svp ??
      0
  3. LeYaude Messages postés 307 Statut Membre 46
     
    Le plus simple me semblerait de la retourner d'abord, et de la lire après.
    0
    1. didy_gwatinik Messages postés 358 Statut Membre 80
       
      Mais comment faire, je ne vois pas justement c'est l'accès à la "case" précédente qui me pose un problème
      0
  4. bzkr7 Messages postés 24 Statut Membre 2
     
    je ne crois pas que tu pouras ..........
    0
    1. didy_gwatinik Messages postés 358 Statut Membre 80
       
      Il faut absolument que je passe par une liste doublement chainée?
      0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. mype Messages postés 2459 Date d'inscription   Statut Membre Dernière intervention   437
     
    tu peux le faire en supprimant le dernier elements de la liste a chaque fois aussi
    0
    1. didy_gwatinik Messages postés 358 Statut Membre 80
       
      J'y ai également pensé mais comment faire pour récupérer la case précédente?
      0
    2. LeYaude Messages postés 307 Statut Membre 46
       
      Récupérer le dernier terme d'une liste chainée simple requiert de la parcourir entièrement, autant donc la retourner une bonne fois pour toutes ! (cf plus bas)
      0
  7. LeYaude Messages postés 307 Statut Membre 46
     
    Non, pour retourner une liste, il suffit de la parcourir récursivement, et de stocker la tête à la queue d'une autre. Je ne connais pas la synthaxe en C, mais en Caml, ça donnerait ça (sachant que t::q représente la liste chainée dont la tête est t, et la queue est q, que [] représente la liste vide, hd (l) la tête de l et tl(l) la queue de l) :

    let miroir liste =
    let rec aux l1 l2 =
    if l1 = [] then l2
    else miroir tl (l1) (hd(l1)) :: l2
    in
    aux liste []
    ;;
    0
    1. didy_gwatinik Messages postés 358 Statut Membre 80
       
      Ah brillante idée je vais essayer ça toute de suite!!
      0