La ricerca binaria albero dei problemi Importazione di nomi da txt in C

voti
0

Ho un lavoro che chiedono fro mi inserire da un documento di testo 100 nomi degli studenti e gli ID formattati come (Cognome Nome ID) pubblicità poi mettere il due alberi binari di ricerca. Il principale BST conterrà cognomi e un puntatore verso l'altro BST che conterrà i nomi e gli ID. Questa è la prima volta che sto trynig di utilizzare puntatori (*, ->, &) quindi mi sono perso. Sono riuscito a importare il testo con la seguente funzione

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

E ora sto cercando di creare la funzione di inserimento che è molto difficile per me, perché io non riesco a capire le argomentazioni che lei dovrebbe prendere

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

Ecco la definizione della struttura:

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;

Qualcuno può aiutarmi a correggere la funzione di inserimento, perché non riesco a capire quali argomenti devo usare per salvare il cognome e io farò il resto me stesso. Credo che il mio problema è la funzione di inserimento. Grazie comunque.

È pubblicato 22/05/2011 alle 16:36
fonte dall'utente
In altre lingue...                            


1 risposte

voti
0

In realtà, hai la parte difficile. Il problema è strcpyche si desidera solo

strcpy(node->surname, sname)

copiare il cognome passata nella struttura nodo.

Per inciso, io sono un po 'a disagio con la vostra liberazione st->namenella vostra loadDatafunzione. Cosa accade la prima volta che si chiama la funzione? Speriamo che st->namea dire NULL, ma un modo preferibile sarebbe quella di avere una funzione di distruggere separato che consente di liberare un intero albero. Quindi è possibile accoppiare il loadDatae destroyDatala funzione. E 'sempre meglio avere alloca e libera come coppie in questo modo. Lo rende improbabile che si perderà la memoria, doppio libero, ecc

Risposto il 22/05/2011 a 16:46
fonte dall'utente

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