Mám domácí práce, která je skoro hotový, ale já jsem uvízl somewhere.I varovat, že je to poprvé, co jsem pomocí ukazatelů a všechny tyto podivné věci, takže jsem docela ztratil. Mým cílem je číst ze seznamu txt studenti dat as (příjmení jméno ID). Trik je v tom, že musím použít jeden strom binárního vyhledávání uložit příjmení (i to udělal), a vytvořit uvnitř prvního stromu další binární vyhledávací strom, který ukládá první jména studentů a ID (nedokončená). Problém je v tom, že když někteří studenti mají stejné příjmení a jiné křestní jméno i nesmí vytvořit nový uzel pro příjmení, ale musím dát nové studenty křestní jméno a číslo uvnitř stávajícího uzlu příjmení. To by mělo být takto: Cameron James 12131313
Andrew 17286378 (jeho příjmení je také Cameron)
Kód je:
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 *);
V hlavní i volat loadData () dovážet studenty
loadData(&temp);
A loadData () je
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);
}
Zavolám add_node (), která vložit nový uzel ve svém hlavním (příjmení) stromu. To alo funguje ..
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;
}
Můj problém začíná (topname = add_node_nameANDid (topname, temp2);), což je functon jako add_node (), ale přidává nové nameANDid uzly v případě, že studenti mají stejné příjmení .. Nevím, jaké argumenty použít ... nenávidím odkazy, protože nejsem zkušenosti s jejich použitím (ne mokrý minimálně) ... A add_node_nameANDid () je
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;
}
V add_node_nameANDid () Snažil jsem se používají podobné proměnné být snadnější rozumět .. Jak bych měl použít ukazatele v add_node_nameANDid (), protože když jsem ji copmpile říká [Výstraha] absolvování arg 1 `add_node_nameANDid‘ od nekompatibilních ukazatel typu v souladu
topname->nleft=add_node_nameANDid(topname->nleft,temp);}(in add_node_nameANDid())
nebo nekompatibilní typ argumentu 2 `add_node_nameANDid‘
topname=add_node_nameANDid(topname,temp2);}
když jsem volat add_node_nameANDid () z add_node ().
Může prosím někdo pomoci mne s tímto nepořádek?













