begin process at 2012 05 28 13:30:41
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

Maths & Algorithmes

 > 

Arbre dictionnaire


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

Arbre dictionnaire

mercredi 6 avril 2005 à 12:38:53 | Arbre dictionnaire

Toto_15l

Bonjour a tous je n'ai trouvé cette question nulle part alors je me décide à la poser, j'espere vous pourrez m'aider ...

Je dois construire un arbre dictionnaire mais je ne sais pas du tout comment m'y prendre  ...
Petite précision je dois le faire en language C et on doit pouvoir créer modifier ou supprimer des mots ainsi qu'en faire une recherche.

Merci de vos réponses et si jamais j'ai oublié de préciser quelque chose faite moi isgne svp.

Bonne continuation a tous.


dimanche 17 avril 2005 à 15:42:35 | Re : Arbre dictionnaire

julienbj

Définition de la structure représentant l'arbre:
typedef struct s_arbre
{
    struct s_arbre *droite, *gauche;
    char *info;
} t_arbre;
On utilisera un pointeur sur l'arbre que l'on nommera arbre.
On considèrera que l'arbre est ordonné avec la relation suivante:
arbre->gauche->info < arbre->info<=arbre->droite->info

Fonction de recherche dans l'arbre:
int recherche(t_arbre *arbre, char *chaine)
{
    if (arbre == NULL)
          return NULL;
    else if (stricmp(arbre->info, chaine) == 0)
          return 1;
    else if (stricmp(arbre->info, chaine) < 0)
          return recherche(arbre->droite, chaine);
    else
          return recherche(arbre->gauche, chaine);
}

Insertion d'un élément de façon ordonné:
void CreerFeuille(char *chaine, t_arbre **arbre)
{
    *arbre = (t_arbre*) malloc(1 * sizeof(t_arbre));
    //Regarder si strlen + 1 ou seulement strlen, je m'en rappelle jamais
    (*arbre)->info = (char*) malloc((strlen(chaine) + 1)*sizeof(char));
    strcpy((*arbre)->info, chaine);
    (*arbre)->gauche = NULL;
    (*arbre)->droite = NULL;
}
 void Insertion(t_arbre **arbre, char *chaine)
{
    if (*arbre == NULL)
       CreerFeuille(chaine, arbre);
    else if (stricmp(chaine, (*arbre)->info) >= 0)
       Insertion((*arbre)->droite, chaine);
    else
       Insertion((*arbre)->gauche, chaine);
}

Suppression d'un élément:
void SupprimerNoeud(t_arbre **arbre)
{
    t_arbre *p, *q;

    p = *arbre;
    if ((*arbre)->droite)
    {
       q = (*arbre)->droite;
       while (q->gauche)
              q = q->gauche;
       q->gauche = p->gauche;
       (*arbre) = (*arbre)->gauche;
    }
    else
       (*arbre) = (*arbre)->gauche;
    free(p->info);
    free(p);
}
void Supprimer(t_arbre **arbre, char *chaine)
{
    if (*arbre)
   {
          if (stricmp((*arbre)->info, chaine) == 0)
                SupprimerNoeud(arbre);
          else if (stricmp((*arbre)->info, chaine) > 0)
                Supprimer(&((*arbre)->gauche), chaine);
          else
                Supprimer(&((*arbre)->droite), chaine);
    }
}

Voila, je pense que ça devrait marcher!
Le seul doute reste sur les tests de stricmp ou il faut tester pour voir si ils sont dans le bon sens, mais j'y ai fait attention, et ça devrait aller!

C'est de la traduction en C d'un prog pascal, alors si il y a problème de pointeur, tu essaies d'adapter, le principe est la!

Vive le C
Tchao
Savon


Cette discussion est classée dans : arbre, dictionnaire


Répondre à ce message

Sujets en rapport avec ce message

dictionnaire sous forme d'arbre [ par sarabakkali ] salutje doit créer un dictionnaire en en utilisant des arbreset je sais par koi commencer Arbre n-aire [ par Sbooby ] Jeu motus [ par marinkaout ] Bonjour à tous ! Nous avons comme projet de réaliser un jeu motus en turbo pascal, nous avons effectuer tout l'algorithme mais le pricipal manque. Nou Arbre Binaire [ par loftiteau ] Bonjour,Je souhaite avoir un cour en c (pdf , url..) qui peut me faciliter la manipulation et le dessin des arbres binaires.Merci d'avance.<fon Un pb lors d'allocation de 3eme elts de type [ par eemikhm ] Bonjour,le programme suivant est écrit et exécuter par DEVC++. Pas d'erreurs de compilation, le problème c'est que lors de l'exécution de la 4eme itér modification et afichage des noeuds d'un arbre en C++ [ par isil4 ] Bonjour;Je ne comprend pas ou est le problème;je suis sur le cryptage de Huffman, dans la phase affectation codes, en ce moment, mon programme affecte aide en langage c !!urgent [ par sinzo ] bonjour ,  svp je suis bloqué dans une partie de mon mini projet..j'ai un arbre n aire dont chaque noeud contient une lettre , et je vx afficher tous Problème d'insértion de la clé dans un arbre binaire de recherche récursivement [ par polobou ] [b]BONJOUR[/b][^^happy8] Comment insérer la clé dans un arbre binaires de recherche récursivement sans utiliser par exemple un tableau [b]Merci[/b][


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
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,577 sec (4)

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