Ben ikili arama ağacının onun düğüm başka bir ikili arama ağacı nerede ikili arama ağacının bir yapı oluşturmak için benden rica bir ödev var. İlk BST Öğrenci Soyadlarını vardır ve diğeri birinci isim ve kimliğine sahip olacaktır. Birisi başka bir soyadı düğümünü yaratmamalıdır başka bir öğrenci ile aynı soyadı var ama ben mevcut soyadı düğüm içinde başka ad ve İd düğüm oluşturmak zorunda Ayrıca eğer. Daha spesifik olmak gerekirse:
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;
Ben bu öğrencilerin varsa: Benim asıl sorun ben adları için 2 BST soyadı için ve başka oluşturmak ama örneğin gibi olmak istiyorum ben aşağıdaki kodla çünkü bulunan her firstname için farklı nameANDid düğümü oluşturmak için nasıl
Stallone Sylvester 11111111
Stallone Noah 22222222
Norris Chuck 33333333
Hogan Hulk 44444444
Hogan Daniel 55555555
Böyle bunları saklamak istiyorum: .........
Stallone Sylvester 11111111
Noah 22222222
Norris Chuck 33333333
Hogan Hulk 44444444
Daniel 55555555
Bunun yerine ben böyle bir şey almak: ...........
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
Daha spesifik olmak için buraya bazı fonksiyonlarını koyacağız
Yük işlevi, bir txt belgesinden isimleri yükler.
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);
}
nerede
struct node temp;//just a node pointer
struct node *top=NULL; //shows the top of the tree
AddNode fonksiyonudur: ...
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;
}
Ve add_node_nameANDid () işlevi, önceki fonksiyonu gibidir ancak bazı değişkenler değişti vardır:
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;
}
Sadece yüklemek ama bu olmadan açıklamak çok zor olacaktır dev kaynak kodu için üzgünüm.
Ben iki sorun var ama bunları çözmek için bilgiye sahip olmadığını düşünüyorum.
İLK: Her soyadı düğüm için farklı ad BST oluşturmak zorunda ve ben bunu yapmam düşünüyorum ama bunu nasıl bilmiyorum ...
Baska öneri?













