최종 질문/여기에 게시하십시오! 나는 이제 내가 생각하기에 아주 가깝다!연결된 목록과 나무
기본적으로, 각 노드는 이름 목록 (트리 노드에 포함 된 데이터)별로 정렬되는 숫자 목록을 포함하는 트리입니다. 본질적으로, 현재, 나는 내 이름이 내 나무에 추가되고 그 나무의 목록에 번호가 주어지기 때문에 여러 개의 숫자를 가진 각 이름의 능력을 향해 노력하고있다. 따라서 링크 된 목록은 두 개 동일한 이름의 다른 숫자가 다른 숫자로 입력됩니다. 나는 동일한 이름을 확인하기 위해 비교 코드를 가지고 있지만, 그 시점에서, 내 포인터를 수정하여 목록에 다른 요소를 추가하고 새 번호를 추가하는 방법을 잘 모르겠습니다.
건배, 어떤 도움/팁/단서 등 많은 아래
을 부탁드립니다 내 현재 코드 :편집 : 문제는 지금, 내가 가지고있는 코드를 가지고, 그리고 수 있도록하는 방법, 정말 이전 TreeNode의 동일한 이름이 입력 될 때 여러 개의 숫자를 포함하는 각 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;
}
내 첫번째 추측 내가 추가하는 데 필요한 코드의 결과는 따라서 == 0 비교 목록을 증가, 거기에 수를 추가 할 때 내 비교 IF 문 내에 배치 될 필요가 있다는 점이다. 그러나 이것이 내가 붙어있는 곳입니다!
숙제 문제가 있습니까? 다시 태그를 지정하십시오. –
예, 태그를 다시 지정하겠습니다. – PnP
이 질문을 특정 질문으로 구성 할 수 있습니까? –