J'ai un travail à domicile qui est presque fait, mais je suis resté fidèle somewhere.I doivent avertir que c'est la première fois que je suis en utilisant des pointeurs et tous ces trucs bizarres, donc je suis assez perdu. Mon but est de lire à partir d'une liste de données des étudiants txt comme (Nom Prénom ID). L'astuce est que je dois utiliser un arbre de recherche binaire pour stocker les noms (je l'ai fait) et de créer à l'intérieur du premier arbre un autre arbre de recherche binaire qui stocke les premiers noms des élèves et l'ID (partiellement complète). Le problème est que lorsque certains étudiants ont le même nom et prénom différent je ne dois pas créer un nouveau noeud pour les noms mais je dois mettre les nouveaux étudiants prénom et identifiant l'intérieur d'un nœud existant de nom. Il devrait être comme: Cameron James 12131313
Andrew 17286378 (son nom de famille est aussi Cameron)
Le code est le suivant:
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 *);
Dans l'ensemble j'appelle les loadData () pour importer les étudiants
loadData(&temp);
Et le loadData () est
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);
}
J'appelle la add_node () qui insérer un nouveau noeud dans mon arbre principal (noms). Ce Alo fonctionne ..
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;
}
Mon problème commence par (topname = add_node_nameANDid (topname, temp2);) qui est un functon comme add_node () mais elle ajoute de nouveaux nœuds de nameANDid si les étudiants ont le même nom de famille .. Je ne sais pas quels sont les arguments à utiliser ... Je déteste les pointeurs parce que je ne suis pas expérimenté avec leur utilisation (pas moins humide) ... Et le add_node_nameANDid () est
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;
}
J'ai essayé dans add_node_nameANDid () d'utiliser des variables similaires pour être plus facile de les comprendre .. Comment dois-je utiliser les pointeurs dans le add_node_nameANDid () parce que quand je copmpile ce qu'il dit [Avertissement] passant arg 1 `add_node_nameANDid » de type pointeur incompatible en ligne
topname->nleft=add_node_nameANDid(topname->nleft,temp);}(in add_node_nameANDid())
ou type incompatible pour l'argument 2 de `add_node_nameANDid »
topname=add_node_nameANDid(topname,temp2);}
lorsque i appelle le add_node_nameANDid () à partir de add_node ().
Peut plaire à quelqu'un me aider avec ce gâchis?













