IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Ada Discussion :

Inverser une liste


Sujet :

Ada

  1. #1
    Membre régulier Avatar de m@tix
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    304
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 304
    Points : 76
    Points
    76
    Par défaut Inverser une liste
    Bonjour,

    Je cherche à réaliser une procédure qui permettrait d'inverser les éléments d'une liste chaînée, c'est-à-dire que les éléments de tête deviendraient les éléments de queue. Je ne vois pas comment m'y prendre, pouvez-vous me montrer en m'expliquant svp?

    Merci d'avance.

  2. #2
    Expert éminent
    Avatar de PRomu@ld
    Homme Profil pro
    Ingénieur de Recherche
    Inscrit en
    Avril 2005
    Messages
    4 155
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Ingénieur de Recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 4 155
    Points : 6 486
    Points
    6 486
    Par défaut
    Tout dépend de la nature de ta liste, est-elle doublement/simplement chaînée ?

    Sinon, l'idée de base c'est de faire appel à la récursivité.

  3. #3
    Membre régulier Avatar de m@tix
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    304
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 304
    Points : 76
    Points
    76
    Par défaut
    Elle est simplement chaînée. Comment ferais-tu alors?

  4. #4
    Expert confirmé
    Avatar de Hephaistos007
    Profil pro
    Enseignant Chercheur
    Inscrit en
    Décembre 2004
    Messages
    2 493
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 493
    Points : 4 166
    Points
    4 166
    Par défaut
    L'inversion d'une liste revient à inverser le chainage entre les cellules prisent deux-à-deux. Pour cela, il faut disposer de trois pointeurs en permanence, et d'itérer en parcourant la liste du début à la fin (dans le sens du chainage d'origine).

    Les trois pointeurs sont :

    - current : le pointeur de la cellule courante
    - previous : le pointeur de la cellule précédente
    - next : le point de la cellule suivante

    Dis autrement, tu as trois pointeurs qui pointent sur trois cellules successives de la liste (disons A, B et C). A quoi ca sert ? D'une part, current et next te permettent d'inverser le chainage entre deux cellules A et B. Le next te permet de pouvoir continuer le parcours de ta liste à partir de C, c-a-d dans le sens du chainage d'origine (important car tu viens d'inverser un chainage et donc de "briser" le sens de parcours de ta liste).

    En répétant cette inversion sur toute la liste, c'est gagné. Il faut juste faire attention au cas particulier, lors de la première et de la dernière itération.

    Bon courage.
    Il vaut mieux mobiliser son intelligence sur des conneries que mobiliser sa connerie sur des choses intelligentes --- devise SHADOKS

    Kit de survie Android : mon guide pour apprendre à programmer sur Android, mon tutoriel sur les web services et enfin l'outil en ligne pour vous faire gagner du temps - N'oubliez pas de consulter la FAQ Android

  5. #5
    Membre régulier Avatar de m@tix
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    304
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 304
    Points : 76
    Points
    76
    Par défaut
    Bonsoir!

    Tout d'abord, merci beaucoup pour ta réponse, je pense avoir compris le principe d'inversion que tu expliques. Il me semble que j'avais déjà vu une méthode d'inversion faisait intervenir la récursivité, mais pas moyen de remettre la main dessus..

    Concernant ta méthode, même si je sens que j'ai compris les grandes lignes, j'ai du mal à la "mettre en forme"... Pourrais-tu stp me proposer (en m'expliquant si possible) un code?

    Encore merci.

  6. #6
    Expert confirmé
    Avatar de Hephaistos007
    Profil pro
    Enseignant Chercheur
    Inscrit en
    Décembre 2004
    Messages
    2 493
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 493
    Points : 4 166
    Points
    4 166
    Par défaut
    Grosso-modo, ca donne un truc comme ca :

    Code pseudo-code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
     
    Procedure InverserListe(L: Liste) is
      Liste previous;
      Liste current;
      Liste next;
     
    Début
     
      -- Situation de départ
      previous <- L;
      current <- previous ^.suivant;
      next <- current^.suivant;
     
      Tant que next <> Nil faire
          -- sauvegarde pour poursuivre le parcours de la liste     
          next <- current^.suivant;
          -- Inversion chainage
          current^suivant <- previous;
          -- On décale le tout pour recommencer
          previous <- current;
          current <- next;
      Fin Faire
     
    Fin;
    Il vaut mieux mobiliser son intelligence sur des conneries que mobiliser sa connerie sur des choses intelligentes --- devise SHADOKS

    Kit de survie Android : mon guide pour apprendre à programmer sur Android, mon tutoriel sur les web services et enfin l'outil en ligne pour vous faire gagner du temps - N'oubliez pas de consulter la FAQ Android

  7. #7
    Membre régulier Avatar de m@tix
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    304
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 304
    Points : 76
    Points
    76
    Par défaut
    Merci Hephaistos007! Je vais relire ton algo avec soin, pour essayer de comprendre.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Inverser une liste chaînée
    Par fearyourself dans le forum Télécharger
    Réponses: 0
    Dernier message: 30/11/2010, 16h41
  2. [Débutant] Inverser une liste
    Par guillaume07 dans le forum Prolog
    Réponses: 7
    Dernier message: 17/05/2009, 19h02
  3. Inverser une liste
    Par Pika-73 dans le forum Débuter avec Java
    Réponses: 3
    Dernier message: 20/05/2008, 21h05
  4. Inverser une liste
    Par ulysse031 dans le forum Langage
    Réponses: 6
    Dernier message: 16/04/2007, 00h36
  5. inverser une liste chainee
    Par aimad41 dans le forum C
    Réponses: 5
    Dernier message: 08/01/2007, 23h30

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo