#99 Article 1036 Posted at 1995/12/16 23:01:49 by PAZ(鬼) (MAP2562) [SAHOU.3]
Subject: Re: プログラミング作法・お題3 /1029
ソートサンプル バグがSOS
/* ririsort.c: りりか君、今日は並べ替えをしてみよう。
化膿せんぱい・・・本当に data sorter になっちゃったんですか?
Programmed by PAZ 1995/12/16
*/
#include <stdio.h> /* 誰かがソースをどこかで */
#include <stdlib.h> /* 一人 書いてる */
#include <string.h>
#define MALLOCERR { puts( "Can't allocate memory." ); exit( 1 ); }
typedef struct ND{
char *str; /* 誰かがソースのどこかで */
struct ND *left, /* バグが こわい */
*right;
}NODE;
int
main( argc, argv ) /* コード書くたびに */
int argc; /* バグ出しやすく・・・ */
char **argv;
{
/* プロトタイプ宣言 */
void rdTree( NODE* ); /* 配置を守りすぎて */
NODE *mkTree( char*, NODE* ); /* 無駄なものもあるのね */
NODE *root= NULL;
while( *++argv ){ /* あなたのその入力を */
root= mkTree( *argv, root ); /* 使っていた私よ */
}
rdTree( root );
}
NODE*
mkTree( s, n )
/* 2分木に文字列を格納する */
/* NODE *mkTree; out: 格納完了ノード */
char *s; /* in: 格納文字列 */
NODE *n; /* in: 検索開始ノード */
{ /* 木の枝は データ構造に */
if( NULL == n ){ /* かたちを変えて tree sort */
if( NULL == (n= ( NODE* )( malloc(sizeof( NODE )) )) ) MALLOCERR;
if( NULL == (n->str= malloc( strlen(s) + 1 )) ) MALLOCERR;
strcpy( n->str, s );
n->left= n->right= NULL;
}else /* 並べなきゃ良くないと */
if( 0 < strcmp(n->str, s) ){ /* if の嵐 */
n->left= mkTree( s, n->left );
}else{
n->right= mkTree( s, n->right );
}
return n;
}
void
rdTree( n )
/* 2分木の内容を表示する */
NODE *n; /* in: 検索開始ノード */
{
if( NULL != n ){ /* 誰かがソースのどこかで */
rdTree( n->left ); /* 今は再帰してる */
puts( n->str ); /* 誰かがソースのどこかで */
rdTree( n->right ); /* バグが こわい */
} /* コード書くたびに */
} /* バグ出しやすく・・・ */
} /* ←あっ! */
LSI C-86 Ver.3.30 試食版で動作確認。
データを2分木に格納して、それを取り出しています。
再帰を使った2分木、好きなんですぅ。(あと、ハッシュ法も)
PAZ
ps. #32 では「レスがSOS」だったし、僕って所詮この程度(^_^;)