J'ai un devoir qui demande à moi de créer une structure d'arbre de recherche binaire où son nœud de l'arbre de recherche binaire est un autre arbre de recherche binaire. Le premier BST a les noms de famille des étudiants et l'autre a les prénoms et l'id. Aussi, si quelqu'un a le même nom de famille avec un autre étudiant, je ne dois pas créer un autre noeud "nom de famille" mais je dois créer à l'intérieur du noeud "nom de famille" existant un autre noeud "prénom et identifiant". Pour être plus précis:Arbre de recherche binaire dans l'arbre de recherche binaire
typedef struct nameANDid{ //name and id nodes
char first[20];
int ID;
struct nameANDid *nleft;
struct nameANDid *nright;
}yohoho;
typedef struct node{ //surname nodes
char last[20];
struct nameANDid yohoho;
struct node *left;
struct node *right;
}node;
Mon principal problème est de savoir comment créer un noeud nameANDid différent pour chaque prenom j'ai trouvé car avec le code suivant je crée 2 BST un pour les noms de famille et un autre pour les noms mais je voudrais être comme par exemple: Si j'ai ces étudiants
Stallone Sylvester 11111111
Stallone Noah 22222222
Norris Chuck 33333333
Hogan Hulk 44444444
Hogan Daniel 55555555
Je veux les stocker comme ceci: .........
Stallone Sylvester 11111111
Noah 22222222
Norris Chuck 33333333
Hogan Hulk 44444444
Daniel 55555555
au lieu de cela, je ta ke quelque chose comme: ...........
Stallone Sylvester 11111111.
Noah 22222222
Chuck 33333333
Hulk 44444444
Daniel 55555555
Norris Sylvester 11111111.
Noah 22222222
Chuck 33333333
Hulk 44444444
Daniel 55555555
Hogan Sylvester 11111111.
Noah 22222222
Chuck 33333333
Hulk 44444444
Daniel 55555555
Je mettrai ici quelques fonctions afin d'être plus précis
La fonction de charge charge les noms d'un document txt.
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<5; i++){
fscanf(fp,"%s",&temp->last);
fscanf(fp,"%s",&temp->yohoho.first);
fscanf(fp,"%d",&temp->yohoho.ID);
top=add_node(top,temp); //this function create a surname node
}
fclose(fp);
printf("\n\nFile loaded\n");
}
où
struct node temp;//just a node pointer
struct node *top=NULL; //shows the top of the tree
La fonction addnode est: ...
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 {
topname=add_node_nameANDid(topname,&temp->yohoho); //Call the add_node_nameANDid to create a new name node in the other tree
return newNode;}
}
else {
if (stricmp(temp->last,top->last) < 0){ //Insert node surname left
top->left=add_node(top->left,temp);}
else if (stricmp(temp->last,top->last) == 0){
topname=add_node_nameANDid(topname,&temp->yohoho); //Call the add_node_nameANDid to create a new name node in the other tree if i have the same surname
}
else {
top->right=add_node(top->right,temp);
}
return top;
}
return NULL;
}
Et la fonction add_node_nameANDid() est comme la fonction précédente, mais il a changé certaines variables:
struct nameANDid * add_node_nameANDid (struct nameANDid *topname, struct nameANDid *temp2){
struct nameANDid *newNode_nameANDid;
if (topname == NULL){
newNode_nameANDid=(struct nameANDid *)malloc(sizeof(struct nameANDid));
temp2->nleft=NULL;
temp2->nright=NULL;
if (memcpy(newNode_nameANDid,temp2,sizeof(struct nameANDid)) == NULL){
printf("Node addition failed\n");
return NULL;}
else {
return newNode_nameANDid;}
}
else {
if (stricmp(temp2->first,topname->first) <= 0){
topname->nleft=add_node_nameANDid(topname->nleft,temp2);}
else {
topname->nright=add_node_nameANDid(topname->nright,temp2);}
return topname;
}
return NULL;
}
Désolé f ou l'énorme code source que je viens de télécharger mais il serait très difficile d'expliquer sans cela.
Je pense que j'ai deux problèmes mais je n'ai pas les connaissances pour les résoudre.
PREMIER: Je dois créer différentes prenom BST pour chaque noeud de nom et je pense que je ne fais pas ça, mais je ne sais pas comment faire ...
Toutes les suggestions?
Doh! Bonne question ................................ –
Avez-vous compilé un de ces codes? Il semble être plein d'erreurs qui ne compileront pas. – Hogan
Vous devriez être plus précis, isoler le problème et afficher seulement le code source du problème et les questions. C'est trop long .. –