0

私はCで基本的な XML パーサーを設計しており、ノード (子と親の両方) を追加する方法を見つけようとしています。だから今の私の考えは、このように見える1つのデータ型、ノードを持つことです

struct node{
    char* name;
    char* value;
    struct node* parent; // if is a child set this to the parent node
    //how to make a list of child nodes
    int numChildren;
    struct node* nextParent;// allow me to iterate through top level parent level nodes
};

したがって、ノードが親である場合、その Parent ポインターは NULL に設定されます。リンク リストにノードを追加する方法は知っていますが、「ノード リスト」に子ノードを追加する方法がわかりません。それで、私がそれをどのように行うかについてのアイデア

4

2 に答える 2

2

One common way to create a tree structure is the following:

struct node {
    //additional values...

    struct node *parent; //optional
    struct node *firstChild;
    struct node *nextSibling;
};

Essentially, each node contains a linked list of its children. The first child is theNode->firstChild, the second child is theNode->firstChild->nextSibling, and so on, until nextSibling==NULL for the last child.

Leaf nodes will have firstChild==NULL, and the root node has parent==NULL.

Adding a child to a node will then be done in the same manner as adding a node to a linked list. For example, to add a child in front of the other children:

allocate newNode and initialize its fields.
newNode->parent = parentNode;
newNode->nextSibling = parentNode->firstChild;
parentNode->firstChild = newNode;
于 2012-12-16T15:22:23.730 に答える
0
#define MAXCHILD N
struct node{
    char* name;
    char* value;
    struct node* parent; 
    //int numChildren; if fixed number of children for each node then use macro
    struct node* nextParent[MAXCHILD];
};

または、

malloc()を使用してnextParentstruct node** nextParentポインタへのポインタとして作成してみてください。各ノードの子の数に応じて割り当てます。以下のように。

struct node *treenode;
treenode = malloc(sizeof(*treenode));
treenode -> numChildren = 2; // It must be initialized with value otherwise may
// take any garbage value.
treenode -> nextParent = malloc((treenode -> numChildren) * sizeof(struct node*));

ただしnumChildren、初期化する必要があります

于 2012-12-16T15:18:26.477 に答える