Aide sur un Arbre binaire container

Aide sur un Arbre binaire container - C - Programmation

Marsh Posté le 30-11-2006 à 17:19:53    

Salut,
 
est-ce que quelqu'un peut m'aider, je tourne en rond et je comprends pas pourquoi :(
 
Notemment dans la fonction position je comprends pas pourquoi les pointeurs ptrG et ptrD ne sont pas mis à NULL
 

Code :
  1. #include <stdio.h>
  2. #include <conio.h>
  3. #include <stdlib.h>
  4. #include <string.h>
  5. typedef char chaine[25] ;
  6. typedef struct elemt
  7.         {
  8.               chaine clef ;
  9.               void * ptinfo;
  10.               struct elemt * ptrG, * ptrD ;
  11.              
  12.         } element ;
  13. typedef struct eleve
  14.         {
  15.               char nom[25] ;
  16.               float moyenne ;
  17.              
  18.         } eleve;
  19.        
  20. element * position ( chaine cle, void * ptinf , element * elePtr )
  21. {
  22. if (elePtr == NULL)
  23.    {
  24.    printf("racine est NULL\n" ) ;
  25.    elePtr = (element *)malloc ( sizeof(elePtr) );
  26.    elePtr->ptinfo = ptinf ; /* on affecte l'info */
  27.    strcpy(elePtr->clef, cle) ; /* on met la clef */
  28.    (elePtr->ptrG) = NULL ;      /* pointeur gauche à NULL */
  29.    elePtr->ptrD = NULL ;      /* pointeur droite à NULL */
  30.    printf("cle : %s\n", cle);
  31.    printf("clef elePtr : %s\n", elePtr->clef);
  32.    printf("adresse fils gauche %p\n" , (elePtr->ptrG));
  33.    printf("adresse fils droite %p\n" , (elePtr->ptrD));
  34.    }
  35. else
  36.     {
  37.      printf("racine vaut non NULL et %p\n", elePtr);
  38.      printf("cle : %s\n", cle);
  39.      printf("clef elePtr : %s\n", elePtr->clef);
  40.      printf("adresse fils gauche %p\n" , elePtr->ptrG);
  41.      printf("adresse fils droite %p\n" , elePtr->ptrD);
  42.      if ( strcmp(cle, elePtr->clef) <= 0 )
  43.      {
  44.      printf("on part a gauche...\n" );
  45.      printf("cle %s , ptinf %p, ptrD %p\n" , cle , ptinf , elePtr->ptrG );
  46.      elePtr->ptrG = position ( cle , ptinf , elePtr->ptrG );
  47.      }
  48.      else
  49.      {
  50.      printf("on part a droite...\n" );
  51.      printf("cle %s , ptinf %p, ptrD %p\n" , cle , ptinf , elePtr->ptrD );
  52.      elePtr->ptrD = position ( cle , ptinf , elePtr->ptrD );
  53.      }
  54.     }
  55. printf("pointeur renvoye %p\n", elePtr);
  56. return elePtr ;
  57. }
  58. void edition ( element * elePtr )
  59. {
  60.    eleve * temp ;
  61.    edition ( elePtr->ptrG ) ;
  62.    printf("%s moyenne : %f\n", temp->nom , temp->moyenne ) ;
  63.    edition ( elePtr->ptrD ) ;
  64. }
  65. void saisie ( element ** elePtr )
  66. {
  67.    eleve * toto ;
  68.    toto = (eleve *)(malloc( sizeof(eleve) ) );
  69.    printf("saisir le nom\n" );
  70.    
  71.    scanf("%s", toto->nom);
  72.    
  73.    printf("saisir moyenne\n" );
  74.    
  75.    scanf("%f", &(toto->moyenne));
  76.    *elePtr = position ( toto->nom , toto , *elePtr ) ;  /* *elePtr est racine */
  77. }
  78. int main()
  79. {
  80.       element * racine = NULL ;
  81.       int i = 5;
  82.       while (i)
  83.       {
  84.       printf("racine %p\n", racine);
  85.       saisie(&racine);
  86.       }
  87.       system("PAUSE" );
  88.       return 0;
  89. }


 
Merci beaucoup.

Reply

Marsh Posté le 30-11-2006 à 17:19:53   

Reply

Marsh Posté le 30-11-2006 à 17:30:43    

[:hahaguy]


---------------
Posté depuis des chiottes, sales. Me gusta.
Reply

Marsh Posté le 30-11-2006 à 17:31:36    

hu ?

Reply

Marsh Posté le 30-11-2006 à 18:49:06    

bon cette version marche mais j'aimerais savoir ce qui merde dans l'autre ^^
 

Code :
  1. #include <stdio.h>
  2. #include <conio.h>
  3. #include <stdlib.h>
  4. #include <string.h>
  5. typedef char chaine[25];
  6. typedef struct elemt
  7. {
  8. chaine clef ;
  9. void * info ;
  10. struct elemt *ptrg, *ptrd ;
  11. } element ;
  12. typedef struct eleve
  13.         {
  14.               char nom[25] ;
  15.               float moyenne ;
  16.              
  17.         } eleve;
  18. /* FONCTION POSITION */
  19. element * position ( chaine nom2 , void * pinfo , element * eleptr)
  20. {
  21. if (eleptr == NULL)
  22. {
  23. eleptr = (element *)malloc(sizeof(element));
  24. strcpy ( eleptr->clef , nom2 ) ;
  25. eleptr->ptrg = eleptr->ptrd = NULL ;
  26. eleptr->info = pinfo ;
  27. }
  28. else
  29. {
  30. if (strcmp(nom2 , eleptr->clef)<0)
  31. eleptr->ptrg = position ( nom2 , pinfo , eleptr->ptrg );
  32. else
  33. eleptr->ptrd = position ( nom2 , pinfo , eleptr->ptrd );
  34. }
  35. return eleptr;
  36. }
  37. void saisie ( element ** eleptr )
  38. {
  39. element * ptrtemp ;
  40. chaine nomm ;
  41. eleve * toto ;
  42. float Moy ;
  43. ptrtemp = *eleptr ;
  44. fflush(stdin);
  45. printf ( "Prenom\n" );
  46. gets(nomm);
  47. fflush(stdin);
  48. printf ( "moyenne\n" ) ;
  49. scanf ("%f" , &Moy);
  50. toto = (eleve *)malloc ( sizeof(eleve) );
  51. strcpy ( toto->nom , nomm );
  52. toto->moyenne = Moy ;
  53. *eleptr = position (nomm, toto, ptrtemp ) ;
  54. }
  55. void edition ( element * ptvar )
  56. {
  57. eleve * temp;
  58. if (ptvar != NULL)
  59. {
  60. edition ( ptvar->ptrg ) ;
  61. temp = ptvar->info ;
  62. printf ( "%s %f\n" , temp->nom , temp->moyenne );
  63. edition ( ptvar->ptrd ) ;
  64. }
  65. }
  66. int main()
  67. {
  68. element * racine = NULL ;
  69. char ajouter = 'O' ;
  70. while ( ajouter == 'O' )
  71. {
  72. saisie ( &racine ) ;
  73. fflush(stdin);
  74. printf("Ajouter eleve ? O // N\n" );
  75. scanf("%c", &ajouter);
  76. }
  77. printf("\n\nAFFICHAGE DE L'ARBRE\n\n" );
  78. edition(racine);
  79.       system("PAUSE" );
  80.       return 0;
  81. }


Message édité par usa_satriani le 30-11-2006 à 18:51:52
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed