2012-11-24 50 views
1

所以我想做一個前綴樹,但我不確定這是否會導致某種邏輯錯誤?是否有可能創建一個指向struct(節點)的指針數組?

typedef struct TreeTag 
{ 
    char letter; 
    struct TreeTag *links[26]; /* Is this advisable? */ 
    int fullword; 
    int linknum; 
}TreeNode; 
+3

這是因爲'links'是'結構TreeTag *',這是沒有定義不'結構TreeTag'的陣列合法代碼。 「struct」的成員通常指向自己(想象一下鏈表)。 – hmjd

+0

請參閱關於數據結構的書。它會讓事情更清楚。 – asheeshr

回答

1

是,指針結構節點陣列允許

如果你這樣做:

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

+0

這是常見的做法嗎?或者它看起來很奇怪? – latenightcode

+0

你可以根據你的要求製作它,但這不是那麼普通 – Omkant

+0

@vincentbelkin:希望你明白了。 – Omkant

0

這很好。您可以使用指向結構內部結構的指針。

該結構被認爲是聲明的,但沒有定義,在您聲明成員的位置,指向聲明但尚未定義的類型的指針是常見的。例如,您將如何能夠在二叉樹或鏈表中定義節點?對於一個列表,你通常會做這樣的事情

typedef struct ListItem { 
    struct ListItem * next; 
    SomeType data; 
} ListItem; 
相關問題