- 35
- 0
- 约8.12千字
- 约 25页
- 2018-03-04 发布于贵州
- 举报
数据结构课程设计—家谱系统参考
一.前言
1 项目简介
家谱(或称族谱)是一种以表谱形式,记载一个以血缘关系为主体的家族世系繁衍和重要人物事迹的特殊图书体裁。家谱是中国特有的文化遗产,是中华民族的三大文献(国史,地志,族谱)之一,属珍贵的人文资料,对于历史学、民俗学、人口学、社会学和经济学的深入研究,均有其不可替代的独特功能。查看祖先和子孙I5处理器 2G内存 320G硬盘
软件:vs 2008
总体设计
3.1 总体设计框架
图1 系统总体设计模块结构图二叉链表它通过描述每个结点的一个孩子和兄弟信息来反映结点之间的层次关系,其结点结构为:firstchild为指向该结点第一个孩子的指针,nextsibling为指向该结点下一个兄弟,elem是数据元素内容,举例如下:
3.3 算法设计
1、家谱的创建和结点的添加
家谱采用的树的结构,通过左孩子,右兄弟的方式变为二叉树,创建的过程实际上就是二叉树的添加结点的过程,根据父亲的名字添加在父亲结点的左边。代码如下:
家谱的创建
FamilyTree::FamilyTree()
{
T=NULL;//开始为空家谱
}
家谱结点的添加
void FamilyTree::Add(person parent, person addNode)
{
//将addnode添加到parent作为parent的孩子结点
int n=0;
addNode-firstchild=addNode-nextsibling=NULL; //初始时firstchild同nextsibling都为空
addNode-parent=parent;
if(parent==NULL) //如果父结点空
{
if(T==NULL) //如果根结点空
{
addNode-data.Depth=n;
T=addNode; //将addnode赋给根结点
return;
}
n=T-data.Depth+1;//否则将原来的根结点成为新根结点的孩子
T-data.Depth=n; //并使原来根结点的depth值加1
addNode-firstchild=T;
T-parent=addNode;
T=addNode;
return;
}
strcpy(addNode-data.parentname,parent-data.name);
n=parent-data.Depth+1;
addNode-data.Depth=n;//将depth值加1
if(parent-firstchild==NULL) //如果parent无孩子,把addNode加入其firstchild
parent-firstchild=addNode;
else
InsertSibling(parent-firstchild,addNode); //否则插入到相应的兄弟结点中去
}
家谱结点的修改
家谱结点的修改就是将结点的指针传入,更新数据就可完成,代码如下:
void FamilyTree::Modify(person curnode,person newnode)
{
//修改某个人的信息
strcpy(curnode-data.name,newnode-data.name);
strcpy(curnode-data.birthplace,newnode-data.birthplace);
strcpy(curnode-data.sex,newnode-data.sex);
strcpy(curnode-data.occupation,newnode-data.occupation);
strcpy(curnode-data.education,newnode-data.education);
strcpy(curnode-data.to
您可能关注的文档
最近下载
- 环保监测中的大数据与数据挖掘技术应用.docx VIP
- 2025年上半年中小学教师资格考试思想政治学科知识与教学能力真题(高级中学).docx VIP
- 2019版新人教版高中英语必修+选择性必修共7册词汇表汇总(带音标).pdf VIP
- 魏晋南北朝花鸟画:艺术独立与文化内涵的溯源.docx
- 工商银行流水模板.pdf VIP
- 2026年春季人教版小学数学二年级下册(2024新教材)教学计划含进度表.docx VIP
- 四川大学《物理化学》2019-2020学年期末试卷.pdf VIP
- 电工电子技术习题答案说课稿.pptx VIP
- 四川大学物理化学期末试卷.doc VIP
- 安装工程施工织设计资料.doc VIP
原创力文档

文档评论(0)