arbre recherche binaire Problème d'importation noms de txt en C

voix
0

J'ai un devoir qui demande vient me insérer dans un document texte 100 étudiants noms et identifiants formatés comme (Nom Prénom ID) annonce puis placez le dans deux arbres binaires de recherche. La principale BST contiendra les noms et un pointeur vers l'autre BST qui contiendra les noms et les ID. Ceci est la première fois que je suis trynig d'utiliser des pointeurs (*, ->, &) donc je suis perdu. J'ai réussi à importer le texte avec la fonction suivante

void loadData(char fname[], Students *st){
 struct Students *new;
 root=NULL;
int i;
FILE *fp;
fp=fopen(fname,r);
if (fp == NULL) printf(File does not exist\n);
fscanf(fp, %d, &(st->size)); //reads the number of students   
free(st->name);
st->name=(Name*) malloc(st->size*(sizeof(Name)));
for (i=0; i<st->size; i++){
    fscanf(fp, %s,&st);
    insert(root,st.surname);/////////I think here is the problem                
    //fscanf(fp, %s, &st->name[i].firstname);        
   // fscanf(fp, %d, &st->name[i].id);
    }
fclose(fp);
   }

Et maintenant, je suis en train de créer la fonction d'insertion qui est très difficile pour moi parce que je ne comprends pas les arguments qu'elle devrait prendre

STU *insert(STU *node, char *sname)///What should i use here to save take the Surname??
{
if(node==NULL){
    node=(NODE *) malloc(sizeof(STU));
    strcpy(node->surname);
    node->left=NULL;
    node->right=NULL;
}
else{
    if(strcmp(*sname, node->surname)<0)
        insert(node->left, *sname);
    else if(strcmp(*sname, node->surname)>0)
        insert(node->right, *sname);
}
return node;
}

Voici la définition de la structure:

typedef struct Name{
  char firstname[20];   
  int id;
  struct Students *nameleft;
  struct Students *nameright;    
} Name;
typedef struct Students{ 
   char surname[20];    
Name *name;      
int size;
    struct Students *left;
    struct Students *right;     
} Students;
typedef struct Students STU;
struct Students *insert(char num);
struct Students *root=NULL;

Quelqu'un peut-il aider à me corriger la fonction d'insertion parce que je ne peux pas comprendre quels arguments je dois utiliser pour enregistrer le nom et je ferai le reste moi-même. Je pense que mon problème est la fonction d'insertion. Merci quand même.

Créé 22/05/2011 à 16:36
source utilisateur
Dans d'autres langues...                            


1 réponses

voix
0

En fait, vous avez le plus dur. Le problème est que strcpyvous voulez juste

strcpy(node->surname, sname)

pour copier le nom passé dans dans la structure de noeud.

En aparté, je suis un peu mal à l' aise avec votre libération st->namedans votre loadDatafonction. Que se passe - t la première fois que vous appelez la fonction? Si tout va bien st->nameest - NULL, mais un moyen serait préférable d'avoir une fonction séparée de détruire qui libère un arbre entier. Ensuite , vous pouvez coupler la loadDataet destroyDatafonction. Il est toujours préférable d'avoir Alloue et libère par paires de cette façon. Il est peu probable qu'il vous fuite de mémoire, double libre, etc.

Créé 22/05/2011 à 16:46
source utilisateur

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more