#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」だったし、僕って所詮この程度(^_^;)