Bonjour,
pour le tri d'une liste chainée de cellule contenant un simple entier
donc par exemple :
struct cellule
{
int valeur;
struct cellule* suivante;
};
est-ce que le fait de trier en changeant juste les valeurs de ces cellules peut être considéré comme un tri de liste ?
Au final le resultat escompté est celui auquel on s'attend
Mais ne doit on pas plutôt trier les cellules elle même, c'est à dire qu'une cellule garde sa propre valeur, en ne touchant pas du tout en écriture les "int valeur" des cellules, mais juste trier en ne manipulant que les pointeurs "suivante" ? Je trouverais ça plus logique, car sinon je ne vois pas quelle serait la différence dans le cas du tri à bulle entre l'utilisation de liste chainée, et l'utilisation de tableau
Merci pour vos futures réponses
Oui en effet ce que tu dis paraît plus "dans l'esprit" d'un algo de listes. Mais bon le tri-bulles c'est plutôt itératif en soi comme algorithme donc ça va ressembler pas mal à la version tableaux de toute façon.
Mais dans tous les cas je te conseille d'abstraire ta structure de liste en ayant des fonctions "head", "tail" et "cons" pour les manipuler sans avoir à toucher aux pointeurs.
Oui, mais là c'est du débat philosophique Ce ne sont pas les mêmes types de listes chainées au final
Bah le truc, c'est que si tu commences à changer les valeurs et pas les pointeurs dans une liste chainée, tu perds un peu tout l'intérêt de la liste chainée, à savoir la rapidité de modification.
Rapidité de modification Modifier un int ou modifier un pointeur, c'est un peu équivalent je pense.
Pour moi l'intérêt des listes, c'est la capacité d'abstraction, qui permet de faire des algos récursifs plus élégants que les manipulations d'indices de tableaux.
Au final je pense que je ferais les deux
trier en ne bougeant pas les cellules entre elle, mais en ne modifiant que les valeurs des cellules
Puis trier en bougeant les cellules entre elle et que chaque cellule garde sa propre valeur
Le mieux est d'avoir une fonction donnant la valeur de la tête de liste, une fonction donnant la queue de la liste, et une fonction ajoutant un entier à une liste.
Ensuite tu fais ton algo en n'utilisant que ces fonctions et en ne touchant plus aux attributs de la structure "cellule"