所以我想做一個前綴樹,但我不確定這是否會導致某種邏輯錯誤?是否有可能創建一個指向struct(節點)的指針數組?
typedef struct TreeTag
{
char letter;
struct TreeTag *links[26]; /* Is this advisable? */
int fullword;
int linknum;
}TreeNode;
所以我想做一個前綴樹,但我不確定這是否會導致某種邏輯錯誤?是否有可能創建一個指向struct(節點)的指針數組?
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]
也有可能,但一切都取決於您的要求和實施。
一個需求,正如我想到的d-ary tree
(其中每個節點有d個節點) 而你想從父節點直接調用它的子節點。
所以struct node *child[d]
是合法的(其中,d爲#defined
)
這是常見的做法嗎?或者它看起來很奇怪? – latenightcode
你可以根據你的要求製作它,但這不是那麼普通 – Omkant
@vincentbelkin:希望你明白了。 – Omkant
這很好。您可以使用指向結構內部結構的指針。
該結構被認爲是聲明的,但沒有定義,在您聲明成員的位置,指向聲明但尚未定義的類型的指針是常見的。例如,您將如何能夠在二叉樹或鏈表中定義節點?對於一個列表,你通常會做這樣的事情
typedef struct ListItem {
struct ListItem * next;
SomeType data;
} ListItem;
這是因爲'links'是'結構TreeTag *',這是沒有定義不'結構TreeTag'的陣列合法代碼。 「struct」的成員通常指向自己(想象一下鏈表)。 – hmjd
請參閱關於數據結構的書。它會讓事情更清楚。 – asheeshr