eglentine
Messages postés5Date d'inscriptionmardi 12 mai 2009StatutMembreDernière intervention14 mai 2009
-
8 mai 2009 à 09:33
eglentine
Messages postés5Date d'inscriptionmardi 12 mai 2009StatutMembreDernière intervention14 mai 2009
-
14 mai 2009 à 09:38
bonjour,
j'esseye de construire un arbre pour la compression jpeg d'une image, et j'utilise le methode de huffman.
g utilisé une liste qui contiendra les noeuds de l'arbre.
au debut je crée ma liste par la suite je teste le premier element avec les 2 suivants val1 et val2, le probleme est que des que je lis les valeur de la liste l'execution ce ferme.
voila mon programme:
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<math.h>
int main()
{typedef struct elt {int valeur;
struct elt *fg;
struct elt *fd;
struct elt *suivt;}liste;
liste *p;liste *tete,*z,*q,*sauv,*tri,*o,*var,*g,*save;
int val1,val2,h,i,n;
bool b;
b=true;
////////**********creation de la liste*************////////////
tete=(liste*)malloc(sizeof(liste*));
printf("entrer n:",n);
scanf("%d",&n);
printf("entrer h:");
scanf("%d",&h);
tete->valeur=h;
o=tete;
i=1;
while (i<n)
{p=(liste*)malloc(sizeof(liste*));
printf("entrer h:",h);
scanf("%d",&h);
p->valeur=h;
o->suivt=p;
o=p;
i++;}
p->suivt=NULL;
///////******affichage de la liste*******/////////
g=tete;
while (g!=NULL)
{printf("%d",g->valeur);
g=g->suivt;}
///////////////**********construction de l'arbre**********//////////
while (tete->suivt!=NULL)
{p=tete;
//while (p->suivt!=NULL)
val1=p->valeur;
p=p->suivt;
save=p;
val2=p->valeur;
sauv=p->suivt;
p=(liste*)malloc(sizeof(liste*));
p->valeur=val1+val2;
printf("%d",p->valeur);
p->fg=tete;
p->fd=save;
p->suivt=sauv;
tete=p;
z=tete->suivt;
if (q!=NULL)
{val1=z->valeur;}
q=z->suivt;
if (q!=NULL)
{val2=q->valeur;}
/*g=tete;
while (g!=NULL)
{printf("%d",g->valeur);
g=g->suivt;}*/
p=tete;
while ((q!=NULL)&&(z!=NULL)&&(val1<=p->valeur)&&(val2<=p->valeur))
{sauv=p;
p=(liste*)malloc(sizeof(liste*));
p->valeur=val1+val2;
p->fg=z;
p->fd=q;
sauv->suivt=p;
p->suivt=q->suivt;
z=p->suivt;
q=z->suivt;
val1=z->valeur;
val2=q->valeur;
/*g=tete;
while (g!=NULL)
{printf("%d",g->valeur);
g=g->suivt;}*/
}
if ((q!=NULL)&&(z!=NULL)&&(val1>p->valeur)&&(val2>p->valeur))
{p=tete;}
else
if ((q!=NULL)&&(z!=NULL)&&(val1<=p->valeur)&&(val2>p->valeur))
{p=tete;
while (b==true)
{b=false;
tri=p->suivt;
while(p!=NULL)
{if(p->valeur>tri->valeur)
{if (p==tete)
{var= tri->suivt;
tri->suivt=p;
p->suivt=var;
tete=tri;
tri=p->suivt;
}
else
if (tri->suivt!=NULL)
{var=tri->suivt;
tri->suivt=p;
p->suivt=var;
tri=p->suivt;
}
else
{tri->suivt=p;
p->suivt=NULL;
}
b=true;
}
else
{p=p->suivt;
tri=p->suivt;
}
}
p=tete;
}
/*g=tete;
while (g!=NULL)
{printf("%d",g->valeur);
g=g->suivt;}*/
}
else
if ((q==NULL)&&(z!=NULL))
{if (p->valeur>z->valeur)
{p=tete;
while (b==true)
{b=false;
tri=p->suivt;
while(p!=NULL)
{if(p->valeur>tri->valeur)
{if (p==tete)
{var= tri->suivt;
tri->suivt=p;
p->suivt=var;
tete=tri;
tri=p->suivt;
}
else
if (tri->suivt!=NULL)
{var=tri->suivt;
tri->suivt=p;
p->suivt=var;
tri=p->suivt;
}
else
{tri->suivt=p;
p->suivt=NULL;
}
b=true;
}
else
{p=p->suivt;
tri=p->suivt;
}
}
p=tete;
}
/*g=tete;
while (g!=NULL)
{printf("%d",g->valeur);
g=g->suivt;}*/
}
}
p=tete;
}
getche();
}
est ce que quelqun peu m'aidez, merci d'avance.
eglentine
Messages postés5Date d'inscriptionmardi 12 mai 2009StatutMembreDernière intervention14 mai 2009 12 mai 2009 à 17:13
mercii pour ta reponse, je n'ai plus le probleme que j'avais.
la je voudré faire un parcourt prefixe de l'arbre, donc j'ai ecrit une procedure prefixe :
et dans le main j'appel la fonction avec le parametre tete, mais voila j'ai droit a un affichage qui ne s'arréte pas et qui n'est meme pas juste.
je c que la fonction est correcte car je l'ai esseyé sur un autre arbre et ca marche, mais sur mon arbre ca ne marche pas.
g aussi esseyé de parcourir sans la fonction prefixe pour voir si le chainage est bien fait et il m'affiche le resultat correcte.
donc est ce que quelqu'un peu voir si mon programme est correcte
merciii d'avance.