Ik heb een huis werk dat is bijna gedaan, maar ik heb geplakt somewhere.I moeten waarschuwen dat het de eerste keer dat ik ben met behulp van pointers en al deze rare dingen, dus ik vrij ben verloren. Mijn doel is om te lezen uit een lijst txt studenten gegevens (achternaam Voornaam ID). De truc is dat ik moet een binaire zoekboom gebruiken om de achternamen op te slaan (ik heb dit gedaan) en te creëren binnen de eerste boom een andere Binary zoekopdracht boom, die de eerste namen van de studenten en de ID (gedeeltelijk voltooid) opslaat. Het probleem is dat wanneer sommige studenten hebben dezelfde achternaam en verschillende voornaam ik moet een nieuw knooppunt voor de achternamen niet maken, maar ik moet de nieuwe studenten voornaam en id binnen een bestaande knooppunt van de laatste naam te zetten. Het zou moeten zijn: Cameron James 12131313
Andrew 17286378 (zijn achternaam is ook Cameron)
De code is:
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 *);
In de belangrijkste i bellen met de loadData () om de studenten te importeren
loadData(&temp);
En de loadData () is
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);
}
Ik noem het add_node (), die een nieuw knooppunt in mijn main (achternamen) boom in te voegen. Dit alo werkt ..
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;
}
Mijn probleem begint met (topname = add_node_nameANDid (topname, temp2);) wat een functon als add_node (), maar ze voegt nieuwe nameANDid knooppunten als de studenten hebben dezelfde familienaam .. Ik weet niet welke argumenten te gebruiken ... ik haat pointers, want ik ben niet ervaren met het gebruik ervan (niet nat tenminste) ... En de add_node_nameANDid () is
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;
}
In add_node_nameANDid () heb ik geprobeerd om soortgelijke variabelen te gebruiken om gemakkelijker zijn om ze te begrijpen .. Hoe moet ik de wijzers in de add_node_nameANDid (), omdat toen ik copmpile hij het zegt [Waarschuwing] passeren arg 1 van `add_node_nameANDid' van onverenigbare pointer-type in lijn
topname->nleft=add_node_nameANDid(topname->nleft,temp);}(in add_node_nameANDid())
of incompatibel type voor het argument 2 van `add_node_nameANDid'
topname=add_node_nameANDid(topname,temp2);}
als ik bel de add_node_nameANDid () uit add_node ().
Kan behagen iemand me helpen met deze puinhoop?













