2012-11-24 2 views
1

그래서 접두사 트리를 만들려고 노력하고 있습니다. 그러나 이것이 어떤 종류의 논리적 오류를 일으키는 지 확실하지 않습니다.struct (node)에 대한 포인터의 배열을 만들 수 있습니까?

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 *child[2]; 

이 유사 struct node *p[26]도 가능하다 할 수 있지만, 모든 것을 의존하지 수 있도록이

struct node * left; 
strcut node * right; 

을 귀하의 요구 사항 및 구현.

하나의 요구 사항은 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;