家谱二叉树c语言程序,家谱图-二叉树

该博客介绍了如何使用C语言通过括号表示法创建家谱二叉树,并提供了查找孩子、祖先、树的括号表示法输出和凹入表示法输出的实现。此外,还包含了对二叉树结构和相关操作的详细解释。
摘要由CSDN通过智能技术生成

// FamilyMap_BTree.cpp : 定义控制台应用程序的入口点。

//

#include "stdafx.h"

#define fileName "familyMap.dat"

//定义节点最大个数

#define MaxNode 20

//节点数据类型

typedef char ElemType;

//二叉树节点类型(节点类型)

typedef struct btnode{

ElemType data;//家谱图中人员编号

btnode * lchild;//成员的配偶指针

btnode * rchild;//成员的子女及子女的兄弟指针

}BtNode;

typedef BtNode *BTree;//定义BtNode *类型为BTree

//二叉树栈

typedef struct{

BtNode * stack[MaxNode];//栈区

int top;//栈顶指针

}BTreeStack;

typedef struct{

BtNode * pNode;

int height;

}BtNodewithHeight;

//二叉树队列

typedef struct{

BtNodewithHeight queue[MaxNode];//队列数据区

int front;//队列头指针

int rear;//队列尾指针

}BTreeQueue;

//从文件中读取系谱图(以括号表示法储存)

bool ReadfromFile(char *&s){

FILE *fp = NULL;

fopen_s(&fp,fileName,"rb");

int size=0;

if (fp == NULL)

return false;

fseek(fp, 0L, SEEK_END);

size = ftell(fp);

s = (char *)malloc(sizeof(size+1));//在这里分配了内存空间,在外面使用,最后释放

*(s + size) = '\0';

fread(s,size,1,fp);

fclose(fp);

return true;

}

//从括号表述法创建二叉树(使用栈进行实现)

bool CreateBTreefromBracketNotation(BTree &r, char * btStr){

BTreeStack bts;

bts.top = -1;//初始化栈

int i = 0, k = 0;//i用于保存串的偏移量,k用于标记处理栈顶的左指针还是右指针

char ch;//ch用于保存括号表示法串的字符

BtNode * temp = NULL;//temp用于保存待处理的节点

while ((ch = *(btStr + i))

家谱管理系统,主要用来管理家族成员的基本信息 1、确定整个程序的功能模块。实现程序的主界面,要对主界面的功能选择输入进行容错处理。 2、实现单个结点信息的录入。 3、对录入日期信息进行合法性检验。 4、采用改变字体颜色的方式突出显示主界面的功能项。 5、计算从出生日期到死亡日期的实际天数 6、若家谱树为空,则新建家谱树。实现成员节点的添加。基本功能中可以 强制要求所有成员不同名,即不考虑同名情况(符合小家族的实际情况)。 7、添加成员节点时,可以选择将新添加的节点作为整个家谱的上一代祖先, 或者将新添加的节点作为某个现有成员的孩子。 8、作为某个现有成员的孩子,根据给出的父节点的姓名将该结点添加到相 应位置,注意,针对某一父节点,添加第一个孩子和其它孩子的区别。 9、要求在孩子兄弟二叉树中按各个孩子的年龄进行排序。 10、将家谱树保存到二进制文件。注意,不能保存空白节点。 11、从文件读入家谱信息,重建孩子兄弟二叉树形式的家谱。 12.从文件中读出所有节点信息到一个数组中,然后按一年中生日的先后进 行快速排序。 13、按姓名查询家谱成员并显示该成员的各项信息。 14、给出某一成员的姓名,删除该成员和该成员的所有子孙。 15、成员信息的修改。信息修改时要给出选择界面让用户选择需要修改的信 息项。基本功能中可以限定不容许修改父亲姓名和本人姓名。对日期信 息进行修改时要进行检验。 16、实现层次递进的方式显示整个家谱,显示结果应该体现家谱树的结构。 17、按各种关键字进行查询,要求给出关键字选择界面,并显示符合查询条 件的节点信息。 18、信息统计基本要求包括:平均身高,平均寿命,男女成员各多少,平均 家庭人口数目(假定每个成员构成一个家庭,该家庭的家庭成员是指成 员本人和他的孩子,即家庭人口数=孩子数+1)。要给出统计项的选择界 面. 19、查询某一成员的所有直系亲属。 20、给出某一成员的所有嫡系祖先。 21、确定两人关系。若两人辈分不等,则应指出甲是乙的多少代长辈(晚辈), 甲是否是乙的直系长辈(晚辈),若辈分相同,则应指出是亲兄弟还是多 少代的堂兄弟。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值