数据结构课程设计—家谱系统参考.docVIP

  • 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

文档评论(0)

1亿VIP精品文档

相关文档