SupprimeDoublons

Anna -  
 Anna -
Bonsoir,

Je veux créer un algorithme qui supprime les doublons dans une liste chaînée triée dans l'ordre croissant et qui contient des caractères alphabétique. SVP, qui peut me dire est ce que c'est correcte ?

Procédure supprimeDoublons( Var L : Liste )
Var
Q,P : Liste
Début
Q<- L
Si L # nil Alors
Tant que Q^.suiv # nil Faire
P<- Q
Q<-Q^.suiv
si Q^.val = P^.val Alors
Q^.suiv <- P^.suiv
Libérer (P)
Fin Si
Fin Tant que
Fin S
Fin

2 réponses

KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
Bonjour,

En gros ça a l'air bon, cependant j'ai un doute sur
Q^.suiv <- P^.suiv
...

On a :
P<- Q
Q<-Q^.suiv

Donc
P^.suiv
c'est l'ancien
Q^.suiv
et donc le nouveau
Q
, si tu fais
Q^.suiv <- P^.suiv
ça donne donc
Q^.suiv <- Q
, or il me semble qu'il faudrait plutôt avoir
Q <- Q^.suiv
pour supprimer la valeur de Q
0
Anna
 
Merciii pour votre réponse, donc ça devient comme ça :

Procédure supprimeDoublons( Var L : Liste )
Var
Q,P : Liste
Début
Q<- L
Si L # nil Alors
Tant que Q^.suiv # nil Faire
P<- Q
Q<-Q^.suiv
si Q^.val = P^.val Alors
P^.suiv <- O^.suiv
Libérer (Q)
Fin Si
Fin Tant que
Fin S
Fin
0
KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
Pour l'inversion c'est mieux, cependant je préférais
Libérer(P)
, car avec
Libérer(Q)
ta boucle
Q^.suiv # nil
va poser problème.

Remarque : c'est typiquement le genre de problèmes qui se résout bien avec de la récursivité.
0
Anna > KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention  
 
Merci beaucoup, je vais essayer encore
0
Anna
 
Bonjour,

j'ai pas trouvée aucune solution, si je libère P je dois utiliser chaînage double pour affecter l'@ qui existe en P au pointeur précédent ( mais dans mon cas je dois trouver la solution avec chaînage simple ) et si je libère Q je ne sais pas comment ça marche avec le boucle tant que !!! ? SVP, n’hésitez pas à m'aider si vous avez des idées.
0
KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
Pour bien progresser, tu pourrais essayer de faire ton algorithme avec un vrai langage de programmation (sur papier ce n'est pas évident à valider).
Dans ton cas, le passage au langage Pascal ne devrait pas trop poser de problème.

Avec IPcute tu pourrais visualiser ton algorithme s'exécuter pas à pas et voir l'état de libération de la mémoire. Voir Prise en main d'IPcute pour des exemples.
0
Anna > KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention  
 
OK, mercii beaucoup KX
0