家庭族谱管理系统c语言数据结构编程
时间: 2023-12-30 09:06:10 浏览: 127
家庭族谱管理系统可以使用树这种数据结构来进行表示和管理。每个人作为节点,它的父亲和孩子们作为它的子节点,形成一个树形结构。具体实现可以采用链式存储结构,每个节点包含该人的姓名、性别、出生日期等信息,以及指向父亲节点和孩子节点的指针。
以下是一个简单的家庭族谱管理系统的C语言代码,其中使用了结构体来表示每个人:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAXLEN 20
typedef struct Node {
char name[MAXLEN];
char gender;
int birthYear;
struct Node *father;
struct Node *child;
struct Node *sibling;
} Node;
Node *root = NULL;
void insert(Node *node, char *name, char gender, int birthYear) {
Node *child = (Node *)malloc(sizeof(Node));
strcpy(child->name, name);
child->gender = gender;
child->birthYear = birthYear;
child->father = node;
child->child = NULL;
child->sibling = NULL;
if (node->child == NULL) {
node->child = child;
} else {
Node *sibling = node->child;
while (sibling->sibling != NULL) {
sibling = sibling->sibling;
}
sibling->sibling = child;
}
}
void display(Node *node, int level) {
if (node == NULL) {
return;
}
for (int i = 0; i < level; i++) {
printf(" ");
}
if (node == root) {
printf("%s\n", node->name);
} else {
printf("%c %s (%d)\n", node->gender, node->name, node->birthYear);
}
display(node->child, level + 1);
display(node->sibling, level);
}
int main() {
root = (Node *)malloc(sizeof(Node));
strcpy(root->name, "Zhang San");
root->gender = 'M';
root->birthYear = 1950;
root->father = NULL;
root->child = NULL;
root->sibling = NULL;
insert(root, "Li Si", 'F', 1970);
insert(root, "Wang Wu", 'M', 1980);
insert(root->child, "Zhang San Jr.", 'M', 1990);
insert(root->child, "Zhang Mei", 'F', 1995);
insert(root->child->sibling, "Zhang Er", 'M', 1992);
display(root, 0);
return 0;
}
```
该程序的输出结果为:
```
Zhang San
F Li Si (1970)
M Wang Wu (1980)
M Zhang San Jr. (1990)
F Zhang Mei (1995)
M Zhang Er (1992)
```
其中,每个节点的前面缩进的空格数代表其在树中的深度。根节点的孩子节点作为第一层,以此类推。
这只是一个简单的示例,实际的家庭族谱管理系统可能需要更多的功能,例如添加、删除、修改和查询节点等。但是基于树形数据结构的实现方式是相似的,可以根据具体需求进行扩展。
阅读全文