#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//printf(“企鹅联系329-----369-----2778”);
#define MAX_NAME_LEN 20
// 家族成员结构体
typedef struct _family_member {
char name[MAX_NAME_LEN]; // 姓名
char gender; // 性别,M代表男性,F代表女性
struct _family_member *father; // 父亲
struct _family_member *mother; // 母亲
struct _family_member *partner; // 配偶
struct _family_member *child; // 孩子链表头指针
struct _family_member *sibling; // 兄弟链表头指针
} family_member;
// 添加孩子
void add_child(family_member *parent, family_member *child) {
child->father = parent;
if (parent->child == NULL) {
parent->child = child;
} else {
family_member *last_child = parent->child;
while (last_child->sibling != NULL) {
last_child = last_child->sibling;
}
last_child->sibling = child;
}
}
// 添加兄弟
void add_sibling(family_member *older_sibling, family_member *younger_sibling) {
younger_sibling->father = older_sibling->father;
if (older_sibling->sibling == NULL) {
older_sibling->sibling = younger_sibling;
} else {
family_member *last_sibling = older_sibling->sibling;
while (last_sibling->sibling != NULL) {
last_sibling = last_sibling->sibling;
}
last_sibling->sibling = younger_sibling;
}
}
// 查找成员
family_member *find_member(family_member *root, char *name) {
if (root == NULL) {
return NULL;
}
if (strcmp(root->name, name) == 0) {
return root;
}
family_member *child = root->child;
while (child != NULL) {
family_member *result = find_member(child, name);
if (result != NULL) {
return result;
}
child = child->sibling;
}
return NULL;
}
// 输出家谱
void print_family_tree(family_member *member, int generation) {
int i;
for (i = 0; i < generation; i++) {
printf(" “);
}
printf(”%s(%c)\n", member->name, member->gender);
family_member *child = member->child;
while (child != NULL) {
print_family_tree(child, generation + 1);
child = child->sibling;
}
}
// 输出某个成员的祖先
void print_ancestors(family_member *member) {
if (member->father == NULL && member->mother == NULL) {
printf(“%s没有祖先\n”, member->name);
return;
}
printf(“%s的祖先:\n”, member->name);
if (member->father != NULL) {
printf(“%s的父亲:%s\n”, member->name, member->father->name);
print_ancestors(member->father);
}
if (member->mother != NULL) {
printf(“%s的母亲:%s\n”, member->name, member->mother->name);
print_ancestors(member->mother);
}
}
// 输出某个成员的子孙
void print_descendants(family_member *member, int generation) {
family_member *child = member->child;
while (child != NULL) {
int i;
for (i = 0; i < generation; i++) {
printf(" “);
}
printf(”%s(%c)\n", child->name, child->gender);
print_descendants(child, generation + 1);
child = child->sibling;
}
}