Bases de la programmation (trace de pseudo-code)
Le programme suivant insère « F », placé en val[6], juste après « C » (indice 3) dans la liste chaînée A → C → E → D → B, reliée par le tableau next, puis affiche la liste à partir de l'élément d'indice 1. Les indices du tableau commencent à 1. Une valeur 0 dans next marque la fin de la liste. Que faut-il écrire à la place de 【a】 pour que l'affichage soit A, C, F, E, D, B ?
string array: val ← {"A", "B", "C", "D", "E", "F"}
integer array: next ← {3, 0, 5, 2, 4, 0}
【a】
integer: p ← 1
while (p ≠ 0)
output val[p]
p ← next[p]
endwhile
- Anext[3] ← 6, puis next[6] ← next[3]
- Bnext[6] ← 3, puis next[3] ← next[6]
- Cnext[6] ← next[3], puis next[3] ← 6
Afficher la réponse et l'explication
Réponse : C. next[6] ← next[3], puis next[3] ← 6
Pour insérer, on fait d'abord pointer le nouvel élément F vers E, vers lequel pointait C (next[3] = 5), puis on fait pointer C vers F. next[6] ← next[3] donne next[6] = 5, et l'affectation suivante next[3] ← 6 relie C → F → E. Dans l'ordre inverse, next[6] ← next[3] s'exécute alors que next[3] vaut déjà 6, donc next[6] = 6 : F pointe vers lui-même et l'affichage C, F, F, … ne se termine jamais. Pour modifier les liens d'une liste chaînée, on effectue les affectations dans un ordre qui ne perd jamais le chemin vers les éléments suivants.
Continuer : 9 autres questions sur Bases de la programmation (trace de pseudo-code)