Последний вопрос / Пост на этом!Думаю, я довольно близок!
По сути, дерево, где каждый узел содержит список чисел, где дерево сортируется по имени (данные содержатся в узле дерева).По сути, на данный момент у меня есть так, чтобы мое имя добавлялось в мое дерево, а списку этого дерева присваивался номер, но я пытаюсь работать над тем, чтобы каждое имя имело несколько номеров, таким образом, связанный список расширяется, если дваодни и те же имена вводятся с разными номерами.У меня есть код сравнения для проверки того же имени, но в этот момент я не уверен, как изменить мои указатели, чтобы я добавил еще один элемент в свой список и добавил туда новый номер.
Приветствия, любая помощь / советы / подсказки и т. Д. Очень ценятся
Ниже мой текущий код:
РЕДАКТИРОВАТЬ: Вопрос действительно, как я сейчас, взять код, который я имею, и разрешитьсписок каждого TreeNode, который должен содержать несколько чисел, когда вводится то же имя предыдущего триода, и, таким образом, создается список чисел для этого имени.
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <string.h>
typedef struct ListNode {
char *number;
struct ListNode *next;
}ListNode;
typedef struct TreeNode {
char *name;
ListNode *numbers;
struct TreeNode *left;
struct TreeNode *right;
}TreeNode;
TreeNode* AddNode(TreeNode *, char *, char *);
TreeNode* SearchTree(TreeNode *root, char *search);
int N_Print(TreeNode *root);
int main(void) {
char my_string[50], name[25], number[25];
TreeNode *root = NULL;
while ((fgets(my_string, 50, stdin)) != NULL) {
if (my_string[0] == '.')
break;
sscanf(my_string, "%s %s", name, number);
root = AddNode(root, name, number);
}
N_Print(root);
return 0;
}
TreeNode* AddNode(TreeNode *root, char *name, char *number) {
int comparison;
if ( root == NULL) {
root = (TreeNode *)malloc(sizeof(TreeNode));
root->numbers = (ListNode *)malloc(sizeof(ListNode));
root->name = strdup(name); root->numbers->number = strdup(number);
root->left = root->right = NULL;
root->numbers->next = NULL;
}else if (( comparison = strcmp(name, root->name)) < 0 )
root->left = AddNode(root->left, name, number);
else if (comparison > 0) {
root->right = AddNode(root->right, name, number);
} else if (comparison == 0 ) {
root->numbers->number = strdup(number);
root->numbers->next = NULL;
}
return root;
}
TreeNode* SearchTree(TreeNode *root, char *search) {
int comparison;
if (root == NULL) {
printf("NOT FOUND\n");
return NULL;
} else if ((comparison = stricmp(search, root->name)) == 0) {
return root;
} else if ((comparison = stricmp(search, root->name)) < 0) {
return SearchTree(root->left, search);
} else if ((comparison = stricmp(search, root->name)) > 0)
return SearchTree(root->right, search);
}
int N_Print(TreeNode *root) {
TreeNode *search_val;
char search[25];
while(1) {
printf("Type a name please: ");
scanf("%24s", search);
if (search[0] == '.')
break;
search_val = SearchTree(root, search);
if (search_val == NULL) {
N_Print(root);
}
printf("%s\n", search_val->numbers->number);
}
return 0;
}
Мое первое предположение состоит в том, что код мне нужендобавить, должен быть помещен в мой оператор сравнения IF, когда результат сравнения == 0, таким образом, увеличить список и добавить туда число.Но это то, где я застрял!