begin process at 2010 02 10 12:38:52
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C++ & C++ .NET

 > 

Algorithme

 > 

Compression, Split & Cryptage

 > 

constrution d'un arbre


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

constrution d'un arbre

vendredi 8 mai 2009 à 09:33:40 | constrution d'un arbre

eglentine

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.

vendredi 8 mai 2009 à 15:03:22 | Re : constrution d'un arbre

Thaumasnot

oui, est ce que quelqun peu l'aider s'il vous plait, excuse moi
vendredi 8 mai 2009 à 17:03:24 | Re : constrution d'un arbre

nickydaquick

Membre Club

Salut,

Premiere erreur :  p=(liste*)malloc(sizeof(liste*));  p=(liste*)malloc(sizeof(liste));

Bonne continuation.

[ Lien ]
je suis heureux de faire partie d'une grande famille ...!
mardi 12 mai 2009 à 17:13:39 | Re : constrution d'un arbre

eglentine

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 :
 
void prefixe(liste *r)
 {if (!vide(r))
     {printf("%d",r->valeur);
      if (!feuille(r))
        {prefixe(filsgauche(r));
         prefixe(filsdroit(r));}
      }
}  

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.
jeudi 14 mai 2009 à 09:38:07 | Re : constrution d'un arbre

eglentine

bonjour,
je voulais juste vous remerciez de vos nombreuses reponses.


Cette discussion est classée dans : tete, valeur, liste, tri, suivt


Répondre à ce message

Sujets en rapport avec ce message

Trie liste chainée simple [ par angelfire0808 ] Bonjour, voila j'essaye d'apprendre à trier une liste chainée mais j'ai quelques soucis #include#include#include#include<co travail sur les files (assez urgent :) ) [ par tagada_du_loft ] voila je doit inserer un elt en tete de file "1ere fonction"et en oter le dernier elt de la file "2eme"les structure de bases sont:******************* Listes chainées [ par angelfire0808 ] Bonjour voila voici mon, code j'ai une ereeur de compilation mais je ne comprend pas ;-(l'erreur c'est ici :   " nouveau->suivant=(*tete); ".De plus j Recherche de la plus grand valeur dans une liste chainée [ par doudou0088 ] Bonjour, J'ai une liste chainé contenant une valeur entière pour chaque élément (environ 96 éléments). J'aimerai affiché l'entier le plus grand de cet problème tri d'une liste d'objet ! [ par tomsawyerbelgique ] Bonjour, j'aimerais savoir comment on fait pour surdéfinir un foncteur de tri de liste d'objet. C'est objet sont des pointeurs sur une structure et la Liste, tri sur date (et non texte de la date) [ par themaste ] Bonjour à tous!Voila, mon problème est que j'ai une liste d'éléments, dont une colonne est remplie par une date.Mon souci, c'est que lorsque je clique Problem de 'left operand must be a lvalue" [ par Orezza ] Voila je vous mets le code qui est un code trouver sur ce site mais que j'ai modifié. je ne comprends pas les erreurs de compilations pourriez-vous ra Structures nommées incompréhensible ... à l'aide [ par otterc8 ] Bonjour, voila j'ai ce bout de code que je ne comprends pas top, malgré des recherches sur les structures, il y a des choses que je ne comprends pas! [LangageC]Tri d'une liste chainée d'entiers. [ par sleyze ] Bonsoir, quelqu'un pourrait il me donner une fonction permettant de trier une liste chainée L dans l'ordre croissant en utilisant un tri autre que le Récupérer valeur combobox (liste déroulante) [ par lolorenzeb ] Salut à tous,Voila je réalise une appli graphique avec les API et j'utilise un combobox.Mon problème est que j'aimerai récupérer la valeur sélectionne


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,437 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales