0

リンクリストのノードは次のとおりです。

struct Node {
char data;
struct Node *next;
int pindex; //this is the first index position in parent[] which is null, next element goes here
int cindex; //this one for child array
char parent[50];
char child[50];
};

これが私が各ノードを作成する方法です。

struct Node *createNode(struct Node *node, char nodeData) {
if(root == NULL) {
    int i=0;
    node= malloc(sizeof(struct Node));
    node->data = nodeData;
    while(i<50) {
        node->parent[i]= '\0';
        node->child[i]= '\0';
        i++;
    }
    node->pindex=0;
    node->cindex=0;
    node->next= malloc(sizeof(struct Node));
    root=node;
    return node;
}
else if (node->data == 0) {
    int j=0;
    node->data = nodeData;
    while (j<50) {
        node->parent[j]= '\0';
        node->child[j]= '\0';
        j++;
    }
    node->pindex=0;
    node->cindex=0;
    node->next= malloc(sizeof(struct Node));
    return node;
}
else
    return createNode(node->next, nodeData);
}

これが私のコードで、特定のノードの親配列と子配列の値を更新しています。

void insert(char a, char b) {
struct Node *pNode, *cNode;
    if (hasNode(root,a))  //check if Node with node->data ='a' exists else create it
        pNode= getNode(root,a);
    else {
        pNode= createNode(root,a);
        //addToFirst(one); No need as we already have list of all elements
    }
    if (hasNode(root, b))
        cNode= getNode(root,b);
    else
        cNode= createNode(root, b);
pNode->child[(pNode->cindex)] = b; //insert a char into child array of parent node 
pNode->cindex++;
cNode->parent[(cNode->pindex)]= a; // insert char into child array of parent node
cNode->pindex++;
}

問題は次のセクションにあります

pNode->child[(pNode->cindex)] = b; //insert a char into child array of parent node 
pNode->cindex++;
cNode->parent[(cNode->pindex)]= a; // insert char into child array of parent node
cNode->pindex++;

cNodeのparent[]に要素が挿入されると、その子[]はメモリから削除されます。そして、後で子供に何かを挿入すると、それは機能します。

以下は、このリンクリスト用に撮ったスクリーンショットです。子配列がデータルート->次のノードにありません

[データ構造のスクリーンショット]

4

0 に答える 0