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

---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
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.


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
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]


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
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


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
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.


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
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