Binaire zoekboom Probleem importeren namen uit txt in C

stemmen
0

Ik heb een huiswerk die vraag weer me invoegen in een tekstdocument 100 studenten namen en id's geformatteerd als (achternaam Voornaam ID) ad zet dan de twee binaire zoekboom. De belangrijkste BST zal achternamen en een verwijzing naar de andere BST welke namen en ID's bevatten. Dit is de eerste keer dat ik ben trynig pointers gebruiken (*, ->, &) dus ik ben verloren. Ik slaagde erin om de tekst met de volgende functie te importeren

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);
   }

En nu ga ik proberen om de insert functie die is heel moeilijk voor me maken, omdat ik niet de argumenten kan begrijpen dat ze moet nemen

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;
}

Hier is de structuur definitie:

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;

Kan iemand me helpen de insert functie te corrigeren, omdat ik niet kan begrijpen welke argumenten ik moet gebruiken om de achternaam te redden en ik zal de rest doen mezelf. Ik denk dat mijn probleem is het inzetstuk functie. Toch bedankt.

De vraag is gesteld op 22/05/2011 om 16:36
bron van user
In andere talen...                            


1 antwoorden

stemmen
0

Eigenlijk, je hebt het harde deel kreeg. Het probleem is dat strcpyje gewoon wilt

strcpy(node->surname, sname)

de naam kunnen kopiëren doorgegeven naar de knooppuntstructuur.

Even terzijde, ik ben een beetje ongemakkelijk met je bevrijden st->namein uw loadDatafunctie. Wat gebeurt er met de eerste keer dat u de functie aan te roepen? Hopelijk st->namewil NULL, maar een beter manier zou zijn om een aparte vernietigen functie die bevrijdt een hele boom te hebben. Dan kunt u koppelen aan de loadDataen destroyData-functie. Het is altijd het beste om toewijst hebben en bevrijdt als paren op deze manier. Het maakt het onwaarschijnlijk dat u zal lekken geheugen, dubbele gratis, enz.

antwoordde op 22/05/2011 om 16:46
bron van user

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