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 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65
|
ELEVE *Tri_Fusion(ELEVE *list1)
{
ELEVE *list2=NULL;
if (list1 == NULL) return NULL;
else if (list1->next == NULL) return list1;
else
{
list2 = Split_List(list1);
if(valeur==1) return Fusion(Tri_Fusion(list1),Tri_Fusion(list2));
if(valeur==2) return Fusion2(Tri_Fusion(list1),Tri_Fusion(list2));
}
return list1;
}
ELEVE *Fusion(ELEVE *list1, ELEVE *list2)
{
if (list1 == NULL) return list2;
else if (list2 == NULL) return list1;
else if (strcmp(list1->nom,list2->nom) < 0)
{
list1->next = Fusion(list1->next, list2);
list1->next->previous=list1;
list1->previous=NULL;
return list1;
}
else
{
list2->next = Fusion(list1, list2->next);
list2->next->previous=list2;
list2->previous=NULL;
return list2;
}
}
ELEVE *Fusion2(ELEVE *list1, ELEVE *list2)
{
if (list1 == NULL) return list2;
else if (list2 == NULL) return list1;
else if (strcmp(list1->prenom,list2->prenom) < 0)
{
list1->next = Fusion(list1->next, list2);
list1->next->previous=list1;
list1->previous=NULL;
return list1;
}
else
{
list2->next = Fusion(list1, list2->next);
list2->next->previous=list2;
list2->previous=NULL;
return list2;
}
}
ELEVE *Split_List(ELEVE* list1)
{
ELEVE *list2=NULL;
if (list1 == NULL) return list1;
else if (list1->next == NULL) return list1->next;
else {
list2 = list1->next;
list1->next = list2->next;
list2->next = Split_List(list2->next);
return list2;
}
} |