Création d'un arbre n aire en C qui contient au début un élement spécial
meriem123435
Messages postés4Date d'inscriptiondimanche 9 mai 2010StatutMembreDernière intervention19 décembre 2010
-
3 juin 2010 à 13:04
Polack77
Messages postés1098Date d'inscriptionmercredi 22 mars 2006StatutMembreDernière intervention22 octobre 2019
-
24 juin 2010 à 10:21
Bonjour !
Je veux créer un arbre n aire en c, qui contient comme tête un élément spécial genre '#'.
J'ai déclaré ma structure comme suit :
Dans cet arbre je veux insérer des mots , le arbre-> car est un élément spécial qui indique la fin du mot.
Dans ma fonction de création j'ai commencé comme ceci, mais je bloque pour la suite, faut dire que je suis un peu débutante en ce qui concerne les listes chainés et l'arborescence.
Tout d'abord on doit saisir une chaine qui représente le mot à insérer.
void CreerArbre(Arbre *Racine,char mot[])
{
Arbre *p,*q;
int i=0,l;
Polack77
Messages postés1098Date d'inscriptionmercredi 22 mars 2006StatutMembreDernière intervention22 octobre 20191 7 juin 2010 à 09:47
Bonjour,
Alors déjà attention quand tu fait :
q=p;
Tes variables p et q ne sont pas encore initialisé donc tu auras des adresse aléatoire ce qui est pas cool
Donc :
else
{
p = (Arbre *)malloc(sizeof(Arbre));
q=p;
Que veut tu faire ici ???
p=p->fils;
Je ne comprend pas le but de cette arbre
Pourquoi stocker carac par carac (un char* c'est mieux non ?)
Quand tu voudras supprimer l'arbre pense bien à faire des free si non tu vas pourrir ta mémoire
Amicalement
1000 recherches sur Google = 1Km de voiture en CO² (réfuté par Google )
1000 recherches sur Forestle = 100 m² de forêt tropicale sauvé .
Surfez écolo
meriem123435
Messages postés4Date d'inscriptiondimanche 9 mai 2010StatutMembreDernière intervention19 décembre 2010 7 juin 2010 à 13:19
Bonjour,
Merci de vouloir m'aider faut dire que je bloque ! Je débute question arborescence..
En fait quand je fais le truc de q=p;
le p il est déjà initialisé au début dans le 1er if il recoit la racine de l'arbre.
Pour t'expliquer le but de cet arbre, je veux créer un dictionnaire, donc pourquoi j'insère caractère par caractère c'est que l'utilisateur va saisir mot par mot donc je dois insérer caractère par caractère pour construire cet arbre. Mais il y'a plusieurs tests à faire avant d'insérer le 1er si le fils de la racine est vide pr insérer, ou bien tester si le caractère existe déjà ...
j'ai changé un peu le code de ma fonction qui crée l'arbre mais il n'est pas encore fini
printf("Donner le mot a ajouter : ");
scanf(" %s",mot);
l=strlen(mot);
if(p->fils==NULL)
for(i=0;i<l;i++)
{
p->fils=(Arbre *)malloc(sizeof(Arbre));
p=p->fils;
p->lettre=mot[i];
p->frere=NULL;
p->fils=NULL;
p->car='';
if(i=l-1) p->car='.';//Caractère spécial pour indiquer la fin du mot
}
else
{
normalement là il me reste deux cas à traiter
1er cas si la 1er lettre du nouveau n'existe pas alors le pointeur va avoir un frère
2ème cas si la première ou les premières lettres du mots existent ben faut pas les rajouter encore jusqu'a ce qu'on arrive à la lettre qui n'existe plus pour créer un frère
}
printf("Voulez vous ajouter un autre mot?");
rep=getch();
Polack77
Messages postés1098Date d'inscriptionmercredi 22 mars 2006StatutMembreDernière intervention22 octobre 20191 24 juin 2010 à 10:21
Plusieurs urgences à gérer ces der semaines mais sa y est j'ai un peut de temps
Alors cette arbre c'est terminé ?
Question bête pourquoi utilise tu une variable supplémentaire pour marquer la fin du mot plutôt que de tester fils à NULL ?
Amicalement
1000 recherches sur Google = 1Km de voiture en CO² (réfuté par Google )
1000 recherches sur Forestle = 100 m² de forêt tropicale sauvé .
Surfez écolo