だから私はプレフィックスツリーを作ろうとしていますが、これが何らかの論理エラーを引き起こすかどうかはわかりませんか?
typedef struct TreeTag
{
char letter;
struct TreeTag *links[26]; /* Is this advisable? */
int fullword;
int linknum;
}TreeNode;
はい、構造体ノードへのポインタの配列は許可されています
これを行う場合:
struct node * p; //it's allowed
したがって、ポインタの配列を宣言するのに問題はありません。
同じ構造体への複数のポインタが必要な場合は、これを行います
struct node * left;
strcut node * right;
だからなぜあなたはこれを行うことができないのですか
struct node *child[2];
同様にstruct node *p[26]
可能ですが、すべては要件と実装によって異なります。
1つの要件、私が考えるようにd-ary tree
(各ノードにはd個のノードがあります)そして、親ノードからその子に直接ナビゲートしたいとします。
だからstruct node *child[d]
合法です(ここでdは#defined
)
それはいいです。構造体内の構造体へのポインタを使用できます。
構造体は、メンバーを宣言した時点で宣言されていると見なされますが、定義されていません。宣言されているがまだ定義されていない型へのポインターが一般的です。たとえば、バイナリツリーまたはリンクリストでノードを定義するにはどうすればよいでしょうか。リストの場合、通常は次のようなことを行います
typedef struct ListItem {
struct ListItem * next;
SomeType data;
} ListItem;