3

同じ構造の要素を持つ C の構造を作成できますか? C で二分探索木を実装する最初の試みは次のとおりです。

#include <stdio.h>

struct binary_tree_node {

    int value;
    struct binary_tree_node *left = null;
    struct binary_tree_node *right = null;

};

main() {

    struct binary_tree_node t;
    t.value = 12;

    struct binary_tree_node y;
    y.value = 44;
    t.left = &y;
}

このコードの何が問題なのかわかりません。助けていただければ幸いです。C でのバイナリ検索の実装については他にも質問があることは承知していますが、自分のコード (およびもちろんいくつかのガイダンス) を使用して、これをゼロから理解しようとしています。ありがとう!

4

3 に答える 3

7

これは gcc 4 のエラー メッセージです。

test.c:6: error: expected ‘:’, ‘,’, ‘;’, ‘}’ or ‘__attribute__’ before ‘=’ token
test.c: In function ‘main’:
test.c:18: error: ‘struct binary_tree_node’ has no member named ‘left’

第一に、あなたnullNULLC にいます。第二に、構造体定義内の構造体の要素に値を設定することはできません。

したがって、次のようになります。

#include <stdio.h>

struct binary_tree_node {

    int value;
    struct binary_tree_node *left;
    struct binary_tree_node *right;

};

main() {

    struct binary_tree_node t;
    t.left = NULL;
    t.right = NULL;
    t.value = 12;

    struct binary_tree_node y;
    y.left = NULL;
    t.right = NULL;
    y.value = 44;
    t.left = &y;
}

または、左右をNULLにする関数を作って、

#include <stdio.h>

struct binary_tree_node {

    int value;
    struct binary_tree_node *left;
    struct binary_tree_node *right;

};

void make_null(struct binary_tree_node *x) {
    x->left = NULL;
    x->right = NULL;
}

main() {

    struct binary_tree_node t;
    make_null(&t)
    t.value = 12;

    struct binary_tree_node y;
    make_null(&y);
    y.value = 44;
    t.left = &y;
}
于 2011-04-25T21:50:13.647 に答える
7

= null構造体宣言で を削除します。自己参照を宣言することはできますが、設定することはできません。

于 2011-04-25T21:50:21.167 に答える
0

構造体を定義するときに、構造体内で値を定義することはできません。このコード スニペットは、プロジェクトに役立つ可能性があります。

typedef struct binary_tree_node
{
    int value;
    binary_tree left;
    binary_tree right;
} binary_tree_node, *binary_tree;

#define DATA(T) ((T)->value)
#define LEFT(T) ((T)->left)
#define RIGHT(T) ((T)->right)
于 2011-04-25T21:52:42.477 に答える