課題なのですが

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
Seem

課題なのですが

#1

投稿記事 by Seem » 8年前

以下のソースコードの★★★の部分に追加ソースを挿入してかんせいさせたいのですが、どのようなコードを追加すればよいのでしょうか?

コード:

#include <stdio.h>
 #include <stdlib.h>
 #include <string.h>

 struct tnode {
 struct tnode *left;
 char name[256];
 struct tnode *right;
 };

 // ノード構造体を NODE型と再定義
typedef struct tnode NODE;

 NODE *SearchAndDestroy(NODE *p, char *dat);
 void DeleteTree(NODE *p);
 NODE *gentree(NODE *, char *);
 void treewalk(NODE *);
 NODE *talloc(void);

 int main(int argc, char *argv[])
 {
 char dat[256], command[256];
 NODE *root;

 root = NULL;

 while(1) {
 printf("command: ");
 scanf("%s", command);

 // コマンド文字列の1文字目により場合分け
switch(command[0]) {
 case 'i': // 1ノードの追加
printf("Name? ");
 scanf("%s", dat);
 root = gentree(root, dat);
 break;
 case 'w': // 木のトラバーサル
printf("Tree:\n");
 treewalk(root);
 break;
 case 'd': // 部分木の削除
printf("Name? ");
 scanf("%s", dat);
 root = SearchAndDestroy(root, dat);
 break;
 case 'q': // プログラム終了
exit(0);
 break;
 default: // ヘルプ表示
printf("i: input / w: walk / ");
 printf("d: delete\n");
 }
 }
 }

 //
 // 削除対象部分木の根ノードの探索と削除関数の起動
//
 // [引数]
 // p: 起点ノードへのポインタ
// dat: 削除対象部分木の根ノードのデータ
// [戻り値]
 // p が NULLのとき:NULL
 // p 以下を削除したとき:NULL
 // それ以外:p をそのまま返す
//
NODE *SearchAndDestroy(NODE *p, char *dat)
 {
 if (p == NULL) return p;

 if (strcmp(dat, p->name) == 0) {
 DeleteTree(p);
 return NULL;
 }

 if (strcmp(dat, p->name) < 0) {
 p->left = SearchAndDestroy(p->left, dat);
 return p;
 }
 else {
 p->right = SearchAndDestroy(p->right, dat);
 return p;
 }
 }

 //
 // 特定ノードを根とする部分木の削除
//
 // [引数]
 // p: 起点ノードへのポインタ
// [戻り値]
 // なし
//
void DeleteTree(NODE *p)
 {
 ★★★★★★★★★★★★
 }

 //
 // ノード追加
//
 // [引数]
 // p: 起点ノードへのポインタ
// w: 記入するデータ
// [戻り値]
 // ノード作成時:作成したノード
// それ以外:p をそのまま返す
//
NODE *gentree(NODE *p, char w[])
 {
 if (p == NULL) {
 p = talloc();
 strcpy(p->name, w);
 p->left = p->right = NULL;
 }
 else if (strcmp(w, p->name) < 0)
 p->left = gentree(p->left, w);
 else
 p->right = gentree(p->right, w);

 return p;
 }

 //
 // 木のトラバーサル
//
 // [引数]
 // p: 起点ノード
// [戻り値]
 // なし
//
void treewalk(NODE *p)
 {
 if (p != NULL) {
 treewalk(p->left);
 printf("%s\n", p->name);
 treewalk(p->right);
 }
 }

 //
 // ノード新規作成
//
 // [引数]
 // なし
// [戻り値]
 // 作成したノードへのポインタ
//
NODE *talloc(void)
 {
 NODE *p;

 p = (NODE *)malloc(sizeof(NODE));
 if (p == NULL) {
 fprintf(stderr,
 "Cannot allocate memory.\n");
 exit(1);
 }
 return p;
 } 

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 13年前
住所: 東海地方
連絡を取る:

Re: 課題なのですが

#2

投稿記事 by softya(ソフト屋) » 8年前

マルチポストされていると思いますので、こちらのルールなのですが相互リンクをお願いします。
お互いの掲示板の回答者が各々どのような回答が書かれているか見るために必要です。
http://detail.chiebukuro.yahoo.co.jp/qa ... 1154644206
http://vipper.2ch.net/test/read.cgi/new ... 452590952/
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

seem

Re: 課題なのですが

#3

投稿記事 by seem » 8年前

ソフト屋 さん
すいません、いまいちこういったサイトは使う機会が少なかったので・・・今後は気をつけていこうと思います

またこちらの問題は解決いたしました、重ねて申し訳ありませんでした

閉鎖

“C言語何でも質問掲示板” へ戻る