Inverser une liste

Inverser une liste - Ada - Programmation

Marsh Posté le 27-05-2009 à 16:58:29    

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.

Reply

Marsh Posté le 27-05-2009 à 16:58:29   

Reply

Marsh Posté le 27-05-2009 à 17:45:38    

Code :
  1. >>> l = range(5)
  2. >>> l
  3. [0, 1, 2, 3, 4]
  4. >>> l.reverse()
  5. >>> l
  6. [4, 3, 2, 1, 0]
  7. >>>


Pour l'explication, aller voir les règles de la catégorie, section [0D]


Message édité par masklinn le 27-05-2009 à 17:46:21

---------------
I mean, true, a cancer will probably destroy its host organism. But what about the cells whose mutations allow them to think outside the box, and replicate and expand beyond their wildest dreams by throwing away the limits imposed by overbearing genetic r
Reply

Marsh Posté le 27-05-2009 à 18:29:08    

J'étais au courant de la règle [0D], mais pour le coup, j'y ai bien réfléchi, et là je ne vois pas comment m'y prendre. J'ai défini une liste, pour ça il n'y a pas de problèmes:
 

Code :
  1. type Element;
  2. type Liste is access Element;
  3. type Element is record
  4.   Info: Integer;
  5.   Suiv: Liste;
  6. end record;


 
Je n'ai pas tellement d'idée. Il faudrait parcourir la liste jusqu'au dernier élément, rattacher ce-dernier en début de liste puis... je ne sais pas! :??:

Reply

Marsh Posté le 27-05-2009 à 18:32:34    

bah non, tu traverses ta liste en ayant 2 éléments à chaque fois et tu inverses le lien entre les deux.


---------------
I mean, true, a cancer will probably destroy its host organism. But what about the cells whose mutations allow them to think outside the box, and replicate and expand beyond their wildest dreams by throwing away the limits imposed by overbearing genetic r
Reply

Marsh Posté le 27-05-2009 à 18:35:07    

Citation :

tu traverses ta liste en ayant 2 éléments à chaque fois


 
Je ne saisis pas l'idée.. Comment ça deux éléments? Comment fais-tu ça?


Message édité par dj_titeuf le 27-05-2009 à 18:35:27
Reply

Marsh Posté le 27-05-2009 à 18:45:07    

En suivant ton pointeur vers l'élément suivant de la liste [:spamafote]


---------------
I mean, true, a cancer will probably destroy its host organism. But what about the cells whose mutations allow them to think outside the box, and replicate and expand beyond their wildest dreams by throwing away the limits imposed by overbearing genetic r
Reply

Marsh Posté le 27-05-2009 à 18:50:26    

Je suis désolé, mais si c'est évident pour toi, c'est loin d'être le cas me concernant. :sweat:
J'essaye de me représenter la chose, en vain..  :(  Peut-être serait-ce plus explicite avec un exemple "concret"?

Reply

Marsh Posté le 27-05-2009 à 19:17:47    

Bah... tu as ta liste chainée

O->O->O->O->O->


Tu sélectionnes le premier élément, et tu gardes un lien sur le 2e


||
\/
 O->O->O->O->O->
   /\
   ||


Tu inverses le lien du premier élément (tu le fais pointer sur son prédécesseur, qui est "rien du tout" )


 ||
 \/
<-O  O->O->O->O->
    /\
    ||


Puis tu avances le tout d'un cran, en gardant une référence sur ton 1er élément


    ||
    \/
<-O  O->O->O->O->
  /\   /\
  ||   ||


Tu inverses le lien du second élément


    ||
    \/
<-O<-O  O->O->O->
  /\   /\
  ||   ||


et tu recommences la séquence (avancer -> inverser) jusqu'à arriver au dernier élément de ta liste


---------------
I mean, true, a cancer will probably destroy its host organism. But what about the cells whose mutations allow them to think outside the box, and replicate and expand beyond their wildest dreams by throwing away the limits imposed by overbearing genetic r
Reply

Marsh Posté le 27-05-2009 à 19:25:25    

Ok, merci pour ces illustrations, ça clarifie déjà pas mal les choses!
Par contre, comment, dans le langage, "garde-t-on un lien sur le deuxième [élément]" (syntaxe?)? En fait, il faudrait créer deux listes auxiliaires?

Reply

Marsh Posté le 27-05-2009 à 19:32:44    

Non, juste une référence.


---------------
I mean, true, a cancer will probably destroy its host organism. But what about the cells whose mutations allow them to think outside the box, and replicate and expand beyond their wildest dreams by throwing away the limits imposed by overbearing genetic r
Reply

Marsh Posté le 27-05-2009 à 19:32:44   

Reply

Marsh Posté le 27-05-2009 à 19:53:40    

:heink:

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed