Envoyé par
brakeche
(j'ai deja la solution de fusionner les deux listes sur une 3eme liste,mais je veut économiser de l'espace memoire)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
|
typedef struct maillon *ptr;
struct maillon {
int val;
ptr lien;};
typedef maillon listechaine;
listechaine l1,l2;
void fusionner(struct maillon l1,struct maillon *l2)
{
ptr pp1,pp2,pp3,pp;pp=l1.lien;
pp1=l1.lien;
pp2=(*l2).lien;
pp3=&(*l2);
while((pp!=NULL)&&(pp2!=NULL))
{
if((*pp2).val<=(*pp).val)
{
pp2=(*pp2).lien;
pp3=(*pp3).lien;
}
else{
pp=(*pp1).lien;
(*pp3).lien=pp1;
pp=(*pp).lien;
}
}
if(pp1!=NULL
(*pp2).lien=pp1;
} |
si vous avez pas compris quelque chose n'esitez pas a me le dire.
merci pour votre attention.
Pour info, tu vas choper des ampoules aux doigts :
(*pp2).lien équivaut en C à pp2->lien
Mis à part ce détail peu intéressant, tu n'as pas besoin d'une troisième liste d'après moi. Tu as en revanche besoin d'un maillon auxiliaire pour faire tes branchements. Cela change la donne non ?
Utilise un profiler pour voir si ton algo consomme beaucoup en temps. Pour gérer la mémoire, je ne pense pas que tu puisses y faire grand chose...
Partager