#include<stdio.h>
#include<stdlib.h>
//构建数据集合 数组+链表
//链表
typedef struct Child
{
int date;
struct Child* next;
}Node;
//结构体数组
Node* node_array[20];
int size;//当前元素个数
int maxSize;//当前元素最大个数 如果不能扩容的话
void Init(int key)
{
size = 0;
maxSize = 20;
node_array[size] = (Node*)malloc(sizeof(Node));
//给新节点赋值
node_array[size]->date = key;
node_array[size]->next = NULL;
size++;
}
//找寻父亲节点
int find_parent(int parent)
{
for (int i = 0; i < size; i++)
{
if (node_array[i]->date == parent)
{
return i;
}
}
return -1;
}
//parent 父亲节点 key 父亲节点对应的孩子
void Great_Tree(int parent, int key)
{
int index = find_parent(parent);
if (index == -1)
{
//没有这个父亲节点构建节点失败
return;
}
else
{
//先把孩子节点放到数组当中
node_array[size] = (Node*)malloc(sizeof(Node));
node_array[size]->date = key;
node_array[size]->next = NULL;
//新节点赋值完以后开始建单链表来使其孩子都存放在一条链上以便查找
Node* new_node = (Node*)malloc(sizeof(Node));
new_node->date = key;
//单链表的插入 头插 对于孩子插入的顺序不做要求因为无所谓插入到哪里其都是父亲的孩子查找时也仍是遍历整个链表
new_node->next = node_array[index]->next;
node_array[index]->next = new_node;
size++;
}
}int main()
{
Init(1);
Great_Tree(1, 2);
Great_Tree(1, 3);
Great_Tree(1, 4);
Great_Tree(2, 5);
Great_Tree(2, 6);
Great_Tree(3, 7);
Great_Tree(3, 8);
//输出时第一个循环是数组寻找所要查找的父亲节点 然后根据其为突破口来查找孩子
for (int i = 0; i < size; i++)
{
Node* temp = node_array[i]->next;
printf("父亲节点为%d", node_array[i]->date);
while (temp != NULL)
{
printf("孩子节点为%d", temp->date);
temp = temp->next;
}
printf("\n");
}
return 0;
}