IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

probleme fonction d'insertion d'un mot dans un arbre lexicographique


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    68
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 68
    Par défaut probleme fonction d'insertion d'un mot dans un arbre lexicographique
    Voilà , je pense que le titre est assez explicite, je veux coder un arbre lexicographique en C, j'ai fais un test en appelant ma fonction inserer avec un mot et la racine de l'arbre, et j'ai un segmentation fault en retour.

    Je ne sais pas ce qui deconne, si vous pouviez m'éclairer.

    Merci

    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
     
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
     
    struct noeud 
    {
      char etiq;
      struct noeud *FilsGauche;
      struct noeud *FrereDroit;
    };
     
    typedef struct noeud tnoeud;
    typedef tnoeud *arbre;
     
     
    arbre CreerCellule(void) {
      arbre a;
      a=(arbre)malloc(sizeof(struct noeud));
      return a;
    }
     
     
    void inserer(char *s,arbre *Lex) {
     
      arbre p,t,q;
      int i;
     
      if((*Lex)==NULL)
        {
          (*Lex)=CreerCellule();
          (*Lex)->etiq=s[0];
          (*Lex)->FilsGauche=NULL;
          (*Lex)->FrereDroit=NULL;
          t=(*Lex);
        }
     
      else
        {
          p=*Lex;
          while(p!=NULL && p->etiq<s[0])
    	{
    	  p=p->FrereDroit;
    	}
          if(p!=NULL)
    	{
    	  if(p->etiq==s[0])
    	    t=p;
    	  else
    	    {
    	      q=CreerCellule();
    	      q=p;
    	      p->etiq=s[0];
    	      p->FrereDroit=q;
    	      p->FilsGauche=NULL;
    	      t=p;
    	    }
    	}
          else
    	{
    	  q=*Lex;
    	  while(q->FrereDroit!=NULL)
    	    {
    	      q=q->FrereDroit;
    	      q->FrereDroit=CreerCellule();
    	      q->FrereDroit->etiq=s[0];
    	      q->FrereDroit->FilsGauche=NULL;
    	      q->FrereDroit->FrereDroit=NULL;
    	      t=q->FrereDroit;
    	    }
    	}
        }
     
          for(i=1;i<strlen(s);i++)
    	{
    	  t=t->FilsGauche;
    	  if(t==NULL)
    	    {
    	      t=CreerCellule();
    	      t->etiq=s[i];
    	      t->FilsGauche=NULL;
    	      t->FrereDroit=NULL;
    	    }
    	  else
    	    {
    	      t=p;
    	      while(p!=NULL && p->etiq<s[i])
    		{
    		  p=p->FrereDroit;
    		}
    	      if(p!=NULL)
    		{
    		  if(p->etiq==s[i])
    		    t=p;
    		  else
    		    {
    		      q=CreerCellule();
    		      q=p;
    		      p->etiq=s[i];
    		      p->FrereDroit=q;
    		      p->FilsGauche=NULL;
    		      t=p;
    		    }
    		}
    	      else
    		{
    		  q=t;
    		  while(q->FrereDroit!=NULL)
    		    {
    		      q=q->FrereDroit;
    		      q->FrereDroit=CreerCellule();
    		      q->FrereDroit->etiq=s[i];
    		      q->FrereDroit->FilsGauche=NULL;
    		      q->FrereDroit->FrereDroit=NULL;
    		      t=q->FrereDroit;
    		    }
    		}
    	    }
    	}   
    }     
     
    int main (void) {
     
      arbre Lex=NULL;
      inserer("salut",&Lex);
      printf("%c",Lex->FilsGauche->etiq);
      return 0;
     
    }

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    68
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 68
    Par défaut
    c'est bon j'ai résolu mon prob, c'était simple, suffisait de rajouter une variable temporaire old_t qui fasse le lien avec la variable t

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [PHP 5.0] Insertion avec plusieurs mots dans une colonne
    Par cyrilherve dans le forum Langage
    Réponses: 4
    Dernier message: 21/03/2009, 08h41
  2. [JDOM] Insertion d'un Noeud dans un arbre JDOM
    Par Endy dans le forum Format d'échange (XML, JSON...)
    Réponses: 2
    Dernier message: 09/06/2006, 15h00
  3. Probleme fonction dans procedure
    Par Kahiba dans le forum Langage
    Réponses: 4
    Dernier message: 24/04/2006, 00h41
  4. probleme d'insertion de code assembleur dans du c++
    Par Pragmateek dans le forum C++
    Réponses: 4
    Dernier message: 05/03/2006, 23h30
  5. Insertion d'une occurence dans un arbre
    Par Gryzzly dans le forum Algorithmes et structures de données
    Réponses: 13
    Dernier message: 19/12/2005, 15h52

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo