presque la derniere version de fusion struct (fonctionnel)

master
parent df065788b4
commit e0cd45f79c

@ -1,19 +1,17 @@
#include "../includes/recherche.h"
#include "../includes/structures.h"
void fusionMaillonDevis(ListeDevis R, int tR, ListeDevis S, int tS, ListeDevis *T, int *tT)
void fusionMaillonDevis(ListeDevis R, ListeDevis S, ListeDevis *T)
{
ListeDevis pT;
int k;
*T = NULL;
pT = *T;
k = 0;
while (R && S)
while (R && S)
{
if (strcmp(R->dev.nomE, S->dev.nomE) < 0)
if (strcmp(R->dev.nomE, S->dev.nomE) < 0)
{
if (!*T)
if (!*T)
{
*T = (ListeDevis)malloc(sizeof(MaillonDevis));
pT = *T;
@ -42,7 +40,6 @@ void fusionMaillonDevis(ListeDevis R, int tR, ListeDevis S, int tS, ListeDevis *
S = S->suiv;
}
pT->suiv = NULL;
k++;
}
while (R)
{
@ -59,7 +56,6 @@ void fusionMaillonDevis(ListeDevis R, int tR, ListeDevis S, int tS, ListeDevis *
pT->dev = R->dev;
R = R->suiv;
pT->suiv = NULL;
k++;
}
while (S)
{
@ -68,7 +64,7 @@ void fusionMaillonDevis(ListeDevis R, int tR, ListeDevis S, int tS, ListeDevis *
*T = (ListeDevis)malloc(sizeof(MaillonDevis));
pT = *T;
}
else
else
{
pT->suiv = (ListeDevis)malloc(sizeof(MaillonDevis));
pT = pT->suiv;
@ -76,46 +72,46 @@ void fusionMaillonDevis(ListeDevis R, int tR, ListeDevis S, int tS, ListeDevis *
pT->dev = S->dev;
S = S->suiv;
pT->suiv = NULL;
k++;
}
*tT = k;
}
void triFusionListeDevis(ListeDevis *ldevis, int *tlog)
void freeListeDevis(ListeDevis *ldevis)
{
ListeDevis pos;
ListeDevis suiv;
pos = *ldevis;
while (pos) {
suiv = pos->suiv;
free(pos);
pos = suiv;
}
*ldevis = NULL;
}
void triFusionListeDevis(ListeDevis *ldevis) {
ListeDevis p;
ListeDevis q;
int tR;
int tS;
int i;
tR = *tlog / 2;
tS = *tlog - tR;
p = *ldevis;
if (!p)
{
*tlog = 0;
return;
}
if (!(p->suiv))
{
*tlog = 1;
q = p->suiv;
if (!q)
return;
}
q = p;
for (i = 0; i < tR - 1; i++)
/*
la boucle qui suit cherche le milieu de la liste chainee
ca rend le code plus complexe
Pour une derniere version, il faudra la virer et la remplacer par une variable comme dans les versions precedentes du code
*/
while (q && q->suiv)
{
if (!q)
break;
q = q->suiv;
p = p->suiv;
q = q->suiv->suiv;
}
if (!q)
return;
ListeDevis temp = q->suiv;
q->suiv = NULL;
triFusionListeDevis(ldevis, &tR);
triFusionListeDevis(&temp, &tS);
fusionMaillonDevis(*ldevis, tR, temp, tS, ldevis, tlog);
q = p->suiv;
p->suiv = NULL;
triFusionListeDevis(ldevis);
triFusionListeDevis(&q);
fusionMaillonDevis(*ldevis, q, ldevis);
}
/*------------------------affichage-----------------------------------*/
@ -137,7 +133,6 @@ void afficherOffre(Offre *offre)
}
/*---------------------------------------------------------------------*/
/*
int main(void)
{
@ -159,19 +154,14 @@ int main(void)
afficherOffre(&offre1);
afficherOffre(&offre2);
int tlog1 = 0;
triFusionListeDevis(&offre1.ldevis, &tlog1);
int tlog2 = 2;
triFusionListeDevis(&offre2.ldevis, &tlog2);
triFusionListeDevis(&offre1.ldevis);
printf("\nApres le tri : \n");
afficherOffre(&offre1);
printf("Taille logique : %d\n", tlog1);
afficherOffre(&offre2);
printf("Taille logique : %d\n", tlog2);
freeListeDevis(&offre1.ldevis);
freeListeDevis(&offre2.ldevis);
return (0);
}
*/
*/

Loading…
Cancel
Save