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?













