Fusion de 2 listes ordonnées par ordre croissant
Fermé
liste
-
Modifié par liste le 4/11/2016 à 19:05
[Dal] Messages postés 6194 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 11 octobre 2024 - 7 nov. 2016 à 12:08
[Dal] Messages postés 6194 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 11 octobre 2024 - 7 nov. 2016 à 12:08
A voir également:
- Fusionner deux listes en c
- Excel fusionner deux cellules - Guide
- Fusionner deux tableaux excel - Guide
- Comment fusionner deux pdf - Guide
- Un ecouteur sur deux marche ✓ - Forum Audio
- Deux ecran pc - Guide
1 réponse
[Dal]
Messages postés
6194
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
11 octobre 2024
1 092
Modifié par [Dal] le 4/11/2016 à 19:38
Modifié par [Dal] le 4/11/2016 à 19:38
Salut liste,
Tu prends un papier et un crayon avec un exemple de deux listes ordonnées et tu vois comment tu fais pour créer une 3ème ordonnée.
Lorsque tu as compris cela, tu as compris l'algorithme, et tu es en mesure de l'implémenter en langage C.
Dal
Tu prends un papier et un crayon avec un exemple de deux listes ordonnées et tu vois comment tu fais pour créer une 3ème ordonnée.
Lorsque tu as compris cela, tu as compris l'algorithme, et tu es en mesure de l'implémenter en langage C.
Dal
4 nov. 2016 à 20:20
Liste *fusion(liste *L1, liste *L2)
Liste *L3, *P;
{while(L1!=NULL)
{if(L1->val > L2->val)
{if(L3== NULL)
{P=(Liste*)malloc(sizeof(liste));
L3=P;}
else{P->suiv=(Liste*)malloc(sizeof(liste));
P=P->suiv;}
L3->val=L1->val;
L3->suiv=NULL;}
else{
{if(L3== NULL)
{P=(Liste*)malloc(sizeof(liste));
L3=P;}
else{P->suiv=(Liste*)malloc(sizeof(liste));
P=P->suiv;}
L3->val=L2->val;
L3->suiv=NULL;}
return L3;}
6 nov. 2016 à 13:58
Et dans le while, je suggére de continuer si L1 est vide et L2 ne l'est pas.
Je me demande si L3 et P ne sont pas utilisés un peu au hasard : as-tu bien décidé à quoi servaient L3 et P?
Modifié par [Dal] le 7/11/2016 à 12:10
@yg_be : dans le while, je suggére de continuer si L1 est vide et L2 ne l'est pas
oui, mais je pense que la valeur NULL est à considérer dans L1->suiv et L2->suiv et qu'il faut rester dans la boucle de comparaisons tant que l'un ou l'autre n'est pas NULL (pas l'un et l'autre). Quand l'un seulement est NULL, cela signifie qu'on n'a plus de comparaisons à faire et que s'il reste des éléments dans l'autre liste, ils doivent juste être ajoutés à la suite dans L3 jusqu'à épuisement (les listes peuvent être de tailles différentes).
@ layal : tu n'as visiblement pas tenté de compiler ton code, car il ne compile pas. La première erreur frappante étant que la première accolade ouvrante délimitant le code de ta fonction est mal placée (elle devrait être au début de ta fonction (à la fin de la définition des paramètres de la fonction, et avant la déclaration des variables locales à la fonction) et ailleurs il te manque une accolade fermante, ou tu as des accolades répétées ou mal placées... ton style d'indentation est à améliorer, il t'évitera ce genre d'erreurs :
voir par exemple https://fr.wikipedia.org/wiki/Style_d%27indentation#Style_K.26R
Pour éviter de répéter ton allocation de mémoire, alloue ton premier élément de L3 en dehors du while, et alloue l'élément suivant avant la fin du while s'il reste des éléments dans les deux listes.
Si c'est croissant, je crois que tu t'es trompée dans l'ordre ...
Je déterminerai plutôt lequel des deux est plus petit ou égal, et c'est celui-là que je mettrais dans L3.
Je ne vois pas comment tu passes à l'élément suivant de ta liste L1 ou L2 dont tu as pris un élément à mettre en L3... on dirait que ta boucle compare toujours la même chose.
Dal