Binar de căutare copac Problemă Se importă nume din txt în C

voturi
0

Am o temă care cere fro mi-a insera dintr-un document de text 100 de nume de studenți și ID-urile formatate ca anunț (Nume ID-ul), apoi a pus în doi copaci binar de căutare. Principalul BST va conține numele de familie și un pointer la celălalt BST, care va conține numele și ID-uri. Aceasta este prima dată când eu sunt trynig să utilizeze indicii (*, ->, &), asa ca sunt pierdut. Am reușit să importe textul cu următoarea funcție

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

Și acum am încercat să creeze funcția de inserție, care este foarte dificil pentru mine, deoarece eu nu pot înțelege argumentele pe care ea ar trebui să ia

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

Aici este definiția structura:

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;

Poate cineva să mă ajute să corecteze funcția de inserție, deoarece eu nu pot înțelege ce argumente i trebuie să folosească pentru a salva numele și i se va face restul eu. Cred că problema mea este funcția de inserție. Multumesc oricum.

Întrebat 22/05/2011 la 16:36
sursa de către utilizator
În alte limbi...                            


1 răspunsuri

voturi
0

De fapt, ai luat partea cea mai grea. Problema este strcpydoar doriți

strcpy(node->surname, sname)

pentru a copia numele de familie a trecut în în structura nodului.

Ca o paranteza, eu sunt un pic inconfortabil cu eliberator dumneavoastră st->nameîn dumneavoastră loadDatafuncție. Ce se întâmplă prima dată când apelați funcția? Să sperăm că st->nameeste NULL, dar un mod preferat ar fi să aibă o funcție separată distruge , care eliberează un întreg copac. Apoi , puteți pune în legătură loadDatași destroyDatafuncția. Este întotdeauna cel mai bine să aibă alocari și eliberează ca perechi în acest fel. Se face puțin probabil se va scurge de memorie, dublu liber, etc.

Publicat 22/05/2011 la 16:46
sursa de către utilizator

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