Bonjour,
j'ai un examen d'algorithme demain matin
en relisant mon cours j'ai l'impression que j'ai mal recopié certains algorithmes traitant des listes chainées (pointeurs).
Je souhaite par exemple écrire un algo qui supprime un élément de la liste chainée à l'emplacement (rang) r qui sera saisi par l'utilisateur. Je me déplace dans la chaine via un pointeur temp1 que j'initialise avec le pointeur de tête. Le pointeur de tête pointant le premier maillon, si je veux supprimer le maillon 3, je dois aller au maillon 2, pour cela je me déplace r-2 fois, pour supprimer le maillon 3 je dois donc me déplacer une fois. temp1 pointe donc sur le maillon 2, je fais pointer temp2 sur le maillon suivant de temp1 qui est le 3. Je fais ensuite pointer temp1 sur le suivant de temp2 (maillon 4). Pour terminer je libère (supprimer de la mémoire) temp2 qui pointe vers le maillon de rang 3 saisi par l'utilisateur.
Cela donne ça :
Algorithme supprimer_element_r;
Type
Personne = ^Maillon;
Maillon = Enregistrement
Nom : chaine;
Suivant : Personne;
fin;
Var
tete, temp1, temp2 : Personne;
i, r : entier
Début
ecrire(‘ entrer le rang de l ’élément à supprimer ’);
lire(r);
temp1 := tete;
Pour i := 1 à r-2 Faire
temp1 := temp^.suivant;
Fin Pour
temp2 := temp1 ^.suivant;
temp1^.suiv := temp2^.suiv;
Libérer(temp2);
Fin
Je cherche juste à savoir si dans la boucle Pour je dois bien mettre r-2 et pas r-1 ou r. Parce que sinon je pense qu'on va aller trop loin dans la liste avec r-1 ou r.
Merci !