質問編集履歴

2

free(), showALLData,その他諸々

2023/02/23 15:37

投稿

KotatsuNeko
KotatsuNeko

スコア2

test CHANGED
File without changes
test CHANGED
@@ -139,6 +139,76 @@
139
139
  }
140
140
 
141
141
  ```
142
+ 修正後(2)のソースコード
143
+ ```c言語
144
+ #include <stdio.h>
145
+ #include <string.h>
146
+ #include <stdlib.h>
147
+ #define NUMBER 10000
148
+
149
+ typedef struct node{
150
+ char name[NUMBER];
151
+ char cellnumb[NUMBER];
152
+ struct node *left;
153
+ struct node *right;
154
+ }Node;
155
+
156
+ Node *addData(Node *add_node, Node *target_node)
157
+ {
158
+ if (target_node == NULL){
159
+ target_node = malloc(sizeof(Node));
160
+ memcpy(target_node, add_node, sizeof(Node));
161
+ }
162
+ else{
163
+ int cmp = strcmp(target_node->name, add_node->name);
164
+ if (cmp > 0)
165
+ target_node->left = addData(add_node, target_node->left);
166
+ else if (cmp < 0)
167
+ target_node->right = addData(add_node, target_node->right);
168
+ else
169
+ puts("同姓同名の人が居ます。");
170
+ }
171
+ return target_node;
172
+ }
173
+
174
+ void showALLData(Node *node)
175
+ {
176
+ if(node != NULL){
177
+ showALLData(node->left);
178
+ printf("name : %s cellnumber : %s\n", node->name, node->cellnumb);
179
+ showALLData(node->right);
180
+ }
181
+ }
182
+
183
+ void freeTree(Node *node) {
184
+ if(node == NULL) return;
185
+ freeTree(node->left);
186
+ freeTree(node->right);
187
+ free(node);
188
+ }
189
+
190
+ int main(void)
191
+ {
192
+ int answer;
193
+ Node *root = NULL;
194
+
195
+ do{
196
+ printf("ノードを追加しますか?\n[Yes] ==> 1 [No] ==> 0\n"); scanf("%d",&answer);
197
+ if(answer == 1){
198
+ Node p = {0};
199
+ printf("名前を入力してください。\n"); scanf("%s", p.name);
200
+ printf("電話番号を入力してください。\n"); scanf("%s", p.cellnumb);
201
+ root = addData(&p, root);
202
+ }
203
+ showALLData(root);
204
+ }while(answer == 1);
205
+
206
+ freeTree(root);
207
+
208
+ return 0;
209
+ }
210
+
211
+ ```
142
212
 
143
213
  ### 試したこと
144
214
 

1

nを削除 answerの余分な宣言を削除

2023/02/23 01:30

投稿

KotatsuNeko
KotatsuNeko

スコア2

test CHANGED
File without changes
test CHANGED
@@ -80,6 +80,65 @@
80
80
  return 0;
81
81
  }
82
82
  ```
83
+ 修正後のソースコード
84
+ ```c言語
85
+
86
+ #include <stdio.h>
87
+ #include <string.h>
88
+ #include <stdlib.h>
89
+ #define NUMBER 10000
90
+
91
+ typedef struct node{
92
+ char name[NUMBER];
93
+ char cellnumb[NUMBER];
94
+ struct node *left;
95
+ struct node *right;
96
+ }Node;
97
+
98
+ Node *addData(Node *target_node, Node *add_node)
99
+ {
100
+ if(target_node == NULL){
101
+ target_node =(Node*)malloc(sizeof(Node));
102
+ strcpy(target_node->name, add_node->name);
103
+ strcpy(target_node->cellnumb, add_node->cellnumb);
104
+ target_node->left = NULL;
105
+ target_node->right = NULL;
106
+ printf("%s", target_node->name);
107
+ }
108
+ else if(strcmp(target_node->name, add_node->name) > 0){
109
+ target_node->left = addData(target_node->left, add_node);
110
+ }
111
+ else if(strcmp(target_node->name, add_node->name) < 0){
112
+ target_node->right = addData(target_node->right, add_node);
113
+ }
114
+ else
115
+ printf("同姓同名の人が居ます。\n");
116
+ return target_node;
117
+ }
118
+
119
+
120
+ int main(void)
121
+ {
122
+ int answer;
123
+ Node *root;
124
+ Node *p;
125
+
126
+ root = NULL;
127
+ do{
128
+ printf("ノードを追加しますか?\n[Yes] ==> 1 [No] ==> 0\n"); scanf("%d",&answer);
129
+ if(answer == 1){
130
+ printf("名前を入力してください。\n"); scanf("%s", p->name);
131
+ printf("電話番号を入力してください。\n"); scanf("%s", p->cellnumb);
132
+ p->left = NULL;
133
+ p->right = NULL;
134
+ root = addData(root, p);
135
+ }
136
+ }while(answer == 1);
137
+
138
+ return 0;
139
+ }
140
+
141
+ ```
83
142
 
84
143
  ### 試したこと
85
144