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.