Binární vyhledávací strom Problem Import jména z txt ve složce C

hlasů
0

Mám úkol, který požádat tam mě vložit z textového dokumentu 100 žáků jména a identifikátory jako formátované (příjmení jméno ID) ad pak dal ve dvou binárních vyhledávacích stromů. Hlavním BST bude obsahovat příjmení a ukazatel na druhou BST, který bude obsahovat jména a identifikátory. Toto je poprvé, že jsem trynig používat ukazatele (* -> &), takže jsem ztracen. Podařilo se mi importovat text s následující funkce

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

A teď se snažím vytvořit funkci insert, který je velmi obtížné pro mě, protože nemohu pochopit argumenty, které by měla přijmout

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

Zde je definice struktury:

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;

Může mi někdo pomoci opravit funkci insert, protože nemohu pochopit, které argumenty musím použít k uložení příjmení a já se postará o zbytek sám. Myslím, že můj problém je funkce insert. I tak děkuji.

Položena 22/05/2011 v 16:36
zdroj uživatelem
V jiných jazycích...                            


1 odpovědí

hlasů
0

Ve skutečnosti, máte nejtěžší. Problém je v tom strcpyjen chcete

strcpy(node->surname, sname)

kopírovat příjmení předaný do struktury uzlu.

Jako stranou, jsem trochu nesvůj s uvolňovat st->nameve své loadDatafunkci. Co se stane při prvním volání funkce? Doufejme st->nameznamená NULL, ale lepší způsob, jak by bylo mít samostatný zničit funkci, která uvolní celý strom. Pak můžete spárovat loadDataa destroyDatafunkci. Je vždy lepší mít přiděluje a uvolní jako páry tímto způsobem. To je nepravděpodobné, budete úniku paměti, dvojité zdarma, atd.

Odpovězeno 22/05/2011 v 16:46
zdroj uživatelem

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