La búsqueda binaria Árbol de problemas Importación de nombres de txt en C

votos
0

Tengo una tarea que piden lado a otro me insertar en un documento de texto 100 nombres de los estudiantes y los ID de formato muy similar al anuncio (Apellido Nombre ID) a continuación, poner el en dos árboles binarios de búsqueda. La principal BST contendrá apellidos y un puntero a la otra BST que contendrá los nombres e ID. Esta es la primera vez que estoy trynig utilizar punteros (*, ->, y) por lo que estoy perdido. Me las arreglé para importar el texto con la siguiente función

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

Y ahora que estoy tratando de crear la función de inserción que es muy difícil para mí porque no puedo entender los argumentos que ella debe tomar

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

Esta es la definición de la estructura:

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;

¿Alguien puede ayudar a corregir la función de inserción porque no puedo entender qué argumentos debo utilizar para guardar el apellido y voy a hacer el resto a mí mismo. Creo que mi problema es la función de inserción. Gracias de cualquier manera.

Publicado el 22/05/2011 a las 16:36
fuente por usuario
En otros idiomas...                            


1 respuestas

votos
0

En realidad, usted tiene la parte difícil. El problema es strcpylo que desea

strcpy(node->surname, sname)

para copiar el apellido aprobada en en la estructura de nodos.

Dicho sea de paso, estoy un poco incómodo con su liberación st->nameen su loadDatafunción. Lo que sucede la primera vez que se llama a la función? Con suerte st->namees decir NULL, sino una forma preferible sería tener una función de destruir separada que libera un árbol completo. A continuación, puede emparejar el loadDatay destroyDatafunción. Siempre es mejor tener reserva y libera en forma de pares de esta manera. Esto hace que sea poco probable que va a perder memoria, doble liberación, etc.

Respondida el 22/05/2011 a las 16:46
fuente por usuario

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