begin process at 2012 02 12 03:25:25
  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

insertion par tri sur une liste chainée [ par Akhelios ] Salut tous, Je voulais réaliser une fonction d'ajout par tri dans une liste chaînée, sauf que ça marche pas et je me demande pourquoi, bon voilà le co 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 Tri appliqué à un tableau à 2 dimensions basé sur la 2nde dimension [ par Askirkela ] Bonjour à tous. Premièrement, j'espère que ce message est au bon endroit (qui m'a parut le plus logique, bien que l'algorithmique soit de mise). Deuxi 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 Programme Tri à Bulle [ par tivanbelle ] Bonjour,J'ai fait ce programme en cours, c'est un tri a bullequi tri des valeur donc 2à2, mais le programme ne fonctionne pas. Pouvez vous me dire ce 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


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

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 : 1,466 sec (4)

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