#include<stdio.h>
#include<string.h>
#include<stdlib.h>
/*構造体*/
typedef struct NODE{/*構造体*/
char name[30];/*名前*/
char telnumb[12];/*電話番号*/
struct NODE *left;
struct NODE *right;
}NODE;
NODE *maketree(NODE *p,char a[], char b[]);
void Output(NODE *p);
void Free(NODE *p);
int Sounyuu(){
}
int Del(){
}
int Search(NODE *p,int n){
char scname[30];
NODE *root;
NODE *tget;
FILE *fp;
int sousa;
fp = fopen("namelist100.txt","r");/*ファイルを開く*/
root = NULL;
while(fscanf(fp,"%s%s",name,telnumb)!=EOF)root = maketree(root,name,telnum\
b);
fclose(fp);
while(1){
printf("処理する内容を選んでください。\n");
printf("1.挿入 2.削除 3.検索\n");
scanf("%d",&sousa);
switch(sousa){
case 1:/*情報を追加する*/
printf("追加する名前をローマ字で名→姓の順で入力してください。\n");
scanf("%s",name);
printf("追加する電話番号を-も含めて入力してください。\n");
scanf("%s",telnumb);
maketree(name[],telnumb[]);
break;
case 2:/*情報を削除する*/
printf("削除する名前を入力してください。\n");
scanf("%s",scname);
Del(scname);
break;
case 3:/*情報を検索する*/
printf("検索したい名前を入力してください。\n");
scanf("%s",name);
Search()
break;
default:/*1~3以外の数字が入力されたとき*/
printf("入力された数字は対応していません。もう一度入力して下さい。/n")\
;
}
printf("\n");
}
printf("正常終了します。\n");
return 0;
}
/*構造体*/
NODE *maketree(NODE *p, char a[], char b[])/*再帰関数*/
{
if(p == NULL){/*NULLに突き当たったところに新たなノードを入れる*/
p = (NODE *)malloc(sizeof(NODE));/*メモリの確保*/
/*データの格納*/
strcpy(p->name, a);
strcpy(p->telnumb, b);
p->left = p->right = NULL;/*”葉”はNULLを指す*/
}
else if(strcmp(a,p->name)<0)/*比較した文字が後にくる->左に*/
p->left = maketree(p->left,a,b);
else if(strcmp(a,p->name)>0)/*比較した文字が先にくる->右に*/
p->right = maketree(p->right,a,b);
else printf("同姓同名のデータは登録できません。\n");
return p;/*main関数にはrootのアドレスを返す*/
}
void Output(NODE *p)/*通り掛け順のなぞりというらしい*/
{
if(p == NULL)
return;
Output(p->left);/*左へ*/
printf("%s %s\n",p->name, p->telnumb);/*親のデータ*/
Output(p->right);/*右へ*/
}
void Free(NODE *p)
{
if(p == NULL)return;
Free(p->left);/*左の子を解放*/
Free(p->right);/*右の子を解放*/
Free(p);/*親*/
}
}
なにか書き忘れもあると思うので、ご指摘ください。
お力をお借りしたいです。よろしくお願いします。
以下、問題文です。
1.4 [標準課題1] データの挿入,削除,および検索の各関数の作成
次に,あらかじめ作成した二分探索木に対して,新しいデータを挿入する関数,削除 する関数,および,データを検索する関数を作成する.作成したプログラムが正しく動 作していることを確認するために,テストデータとして 100,000 件のリストを保存した “namelist100k.txt” をプログラミング演習 II のページからダウンロードし,そのデータ から作成した二分探索木に対して新しいデータの入力,検索,削除を行う.まず,作成し た二分探索木に対する処理(入力,検索,削除)の選択を標準入力で行い,次に処理を行 うデータを入力する.具体的に挿入されたことを検索により確かめて正しく動作してい ることを確認する.また,データの削除についても検索を行ってデータが二分探索木か ら削除されたことを確認する.