Binar de căutare copac Ajutor cu indicii între două structuri de

voturi
2

Am o munca la domiciliu, care este aproape gata, dar am blocat somewhere.I trebuie să avertizeze că este prima dată când sunt utilizați indicii și toate aceste lucruri ciudate așa că sunt destul de pierdut. Scopul meu este de a citi dintr-o listă de studenți txt date ca (Nume ID-ul). Trucul este că eu trebuie să utilizeze un singur arbore binar de căutare pentru a stoca Patronimele (i-au făcut acest lucru) și pentru a crea în interiorul primului copac alt arbore binar de căutare care stochează primele nume ale studenților și ID-ul (parțial completă). Problema este că, atunci când unii elev au același nume de familie și diferit primul nume nu trebuie să creeze un nou nod pentru numele de familie, dar am pentru a pune noi elevi nume și ID-ul în interiorul unui nod existent de nume de familie. Ar trebui să fie ca: Cameron James 12131313

Andrew 17286378 (numele lui este, de asemenea, Cameron)

Codul este:

typedef struct nameANDid{
    char first[20];
    int ID;
    struct node *nleft;
    struct node *nright;
}yohoho;
typedef struct node{  
   char last[20];  
   struct nameANDid yohoho;  
   struct node *left;
   struct node *right;
 }node;
 ///
 struct node temp;
 struct nameANDid temp2;
 struct node *top=NULL;
 struct nameANDid *topname=NULL;
 void loadData();
 struct nameANDid * add_node_nameANDid(struct nameANDid *, struct nameANDid *);
 /////
 struct node * add_node (struct node *, struct node *);
 struct node * search_node (struct node *, char *);
 void print_node (struct node *);
 void print_tree (struct node *);

În principal eu numesc loadData () pentru a importa studenților

  loadData(&temp);

Și loadData () este

void loadData(struct node *temp){      
int i;
FILE *fp;
fp=fopen(FILENAME,r);
if (fp == NULL) printf(File does not exist\n);
for (i=0; i<20; i++){       
    fscanf(fp,%s,&temp->last);
    fscanf(fp,%s,&temp->yohoho.first);
    fscanf(fp,%d,&temp->yohoho.ID);     
    top=add_node(top,temp);
    }
fclose(fp);
printf(\n\nFile loaded\n);  
}

Eu numesc add_nod (), care se introduce un nou nod în meu principal (Surnames) copac. Aceasta funcționează alo ..

 struct node * add_node (struct node *top, struct node *temp){
   struct node *newNode;  
   if (top == NULL){    
   newNode=(struct node *)malloc(sizeof(struct node));
   temp->left=NULL;
   temp->right=NULL;
   if (memcpy(newNode,temp,sizeof(struct node)) == NULL)    {
      printf(Node addition failed\n);
      return NULL;}
   else {      
     //printf(Node added\n);
     return newNode;}
   }
   else {   
      if (stricmp(temp->last,top->last) < 0){
         // printf(left\n);
        top->left=add_node(top->left,temp);}
      else if (stricmp(temp->last,top->last) == 0){
        // printf(Last names are equal\n); 
        topname=add_node_nameANDid(topname,temp2);} //Here is one of my problems
      else {
        // printf(right\n);
        top->right=add_node(top->right,temp);}
        // printf(Node added\n);   
        return top;
       } 
      return NULL;
  }   

Problema mea începe cu (topname = add_node_nameANDid (topname, Temp2);), care este un functon ca add_nod (), dar ea adaugă noi noduri nameANDid dacă elevii au același nume de familie .. Nu știu ce argumente să folosească ... nu-mi place indicii pentru că nu sunt experimentat cu utilizarea lor (nu udă cel puțin) ... Și add_node_nameANDid () este

   struct nameANDid * add_node_nameANDid (struct nameANDid *topname, struct nameANDid *temp){
     struct nameANDid *newNode_nameANDid;  
     if (topname == NULL){    
    newNode_nameANDid=(struct nameANDid *)malloc(sizeof(struct nameANDid));
    temp->nleft=NULL;
    temp->nright=NULL;
    if (memcpy(newNode_nameANDid,temp,sizeof(struct nameANDid)) == NULL){
       printf(Node addition failed\n);
       return NULL;}
    else {      
      //printf(Node added\n);
      return newNode_nameANDid;}
    }
    else {   
        if (stricmp(temp->first,topname->first) <= 0){
           // printf(leftname\n);
           topname->nleft=add_node_nameANDid(topname->nleft,temp);}
        else {
           // printf(rightname\n);
           topname->nright=add_node_nameANDid(topname->nright,temp);}
          // printf(Node added\n);   
          return topname;
        } 
        return NULL;
     }

În add_node_nameANDid () am încercat să folosească variabile similare pentru a fi mai ușor să le înțeleagă .. Cum ar trebui să utilizeze pointerii în add_node_nameANDid () pentru că atunci când am copmpile se spune [Avertisment] trecerea arg 1 din `add_node_nameANDid“ de la tipul pointer incompatibil in linie

 topname->nleft=add_node_nameANDid(topname->nleft,temp);}(in add_node_nameANDid())

sau de tip incompatibil pentru argumentul 2 al `add_node_nameANDid“

 topname=add_node_nameANDid(topname,temp2);}

când eu numesc add_node_nameANDid () din add_nod ().

Poate cineva vă rugăm să mă ajute cu mizeria asta?

Întrebat 23/05/2011 la 09:57
sursa de către utilizator
În alte limbi...                            


1 răspunsuri

voturi
3

Se pare că problema este că ați utilizat node *pentru ambele structurilor din stânga și din dreapta. Deci , ceea ce se întâmplă este că , copiați o struct nameANDidîntr - o struct node. Vă sugerez că nameANDidaveți nevoie nleftși nrightsă fie indicii pentru a struct nameANDidnu struct node.

EDIT: Există diverse alte probleme, cum ar fi cred că intenția ar fi să se uite în yohohoîn nodul struct pentru a obține arborele binar al primelor nume. De asemenea , add_node_nameANDideste setarea temp->nleftși temp->nrightnull, nu sunt sigur acest lucru este corect.

Publicat 23/05/2011 la 10:12
sursa de către utilizator

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