数据结构实训指导家谱树.doc

  1. 1、本文档共10页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
数据结构实训指导家谱树

计Y104班数据结构 实训指导 广西工学院计算机工程系 阳树洪 2011年12月 1 实训目的 本次实训的总体目的在于通过系统的编程训练,培养学生编写一个具有一定难度的小型系统的能力,培养学生从编写单个程序,实现单个程序功能到进行系统开发,整体调试的能力。从知识点的角度来说,目的在于通过本实训项目,让学生对二叉树这一重要数据结构的运用更加熟练。 2 实训题目:树状家谱管理系统。 本次实训的题目是树状家谱管理系统。要求利用数据结构的知识,通过将树转换为二叉树的概念,采用孩子兄弟二叉树的方式实现家谱管理系统。不容许采用数据库实现家谱管理。每个树结点表示一个家族成员,成员基本信息,姓名性别出生地家庭住址职业简历具体属性自行确定。 图1 系统总体结构示意图 5 数据结构 5.1 总体数据结构 1、家谱树采用孩子兄弟二叉树表来实现,如图2 所示的家谱采用图3所示的孩子兄弟二叉树来存储。 图2 树状形式的家谱示意图 图2中同一父亲的亲兄弟已经按年龄从大到小排序,即最左边的孩子是父节点的第一个孩子。将其转化为孩子兄弟二叉树的方法是:对某一个节点,令其左子树指针指向该节点的第一个孩子,右子树指针指向该节点的下一个兄弟。按这种方法,图2所示的家谱树可用如图3所示的孩子兄弟二叉树来实现: 图3 孩子兄弟二叉树表示的家谱树 2、节点数据结构: 建议将节点信息中个人信息作为一个结构体。日期信息作为一个包含年、月、日三个成员的结构体。 节点包括三个成员域: 节点个人信息(结构体); 第一个孩子指针; 下一个兄弟指针; 其中节点个人信息结构体可包括:姓名性别出生地家庭住址职业简历 图4 日期信息的合法性检验流程图 6.2阶段任务二(10学时) 6.2.1基本功能 1、若家谱树为空,则新建家谱树。实现成员节点的添加。基本功能中可以强制要求所有成员不同名,即不考虑同名情况(符合小家族的实际情况)。 2、添加成员节点时,可以选择将新添加的节点作为整个家谱的上一代祖先,或者将新添加的节点作为某个现有成员的孩子。 3、作为某个现有成员的孩子,根据给出的父节点的姓名将该结点添加到相应位置,注意,针对某一父节点,添加第一个孩子和其它孩子的区别。 4、要求在孩子兄弟二叉树中按各个孩子的年龄进行排序。 6.2.2选做功能 1、如果容许存在同名,如何实现。 2、父子之间的出生年月应该符合常理,比如儿子应该至少比父亲小多少岁(自行设定)。同时,父亲如果已经死亡,则其死亡日期最多只能在儿子出生之前的多少个月(自行设定,不考虑过继或领养的情况)。同时,同一父节点的孩子之间,亲兄弟的出生日期应该至少有多少个月的差距(只考虑一夫一妻制)。 6.2.3关键算法提示 成员节点添加时,先判断新节点是作为整个家族的上一代祖先还是某个成员的孩子,若作为整个家族的祖先,则调用添加祖先模块,若作为某个成员的孩子,则调用添加孩子模块;在添加孩子模块中,先判断父节点是否有第一个孩子,若无,则将新节点作为父亲的第一个孩子,否则调用添加兄弟模块;添加兄弟时应按年龄寻找插入位置。 参考流程图: 图5 添加成员孩子模块流程图 图6 添加兄弟模块流程图 6.3阶段任务三(8学时) 6.3.1基本功能 1、将家谱树保存到二进制文件。注意,不能保存空白节点。 2、从文件读入家谱信息,重建孩子兄弟二叉树形式的家谱。 6.3.2选作功能 从文件中读出所有节点信息到一个数组中,然后按一年中生日的先后进行快速排序。 6.3.3关键算法提示 采用先序遍历二叉树的方式将节点信息保存到文件。保存信息时,可以只保存节点个人信息(结构体);而无需保存指针域。 从文件读取信息重建二叉时,先将节点信息读入到缓冲区,通过读入结构体中父亲姓名找到父节点,然后用与节点添加类似的方式将读入的节点添加到二叉树上。 6.4阶段任务四(8学时) 6.4.1基本功能 1、按姓名查询家谱成员并显示该成员的各项信息。 2、给出某一成员的姓名,删除该成员和该成员的所有子孙。 3、成员信息的修改。信息修改时要给出选择界面让用户选择需要修改的信息项。基本功能中可以限定不容许修改父亲姓名和本人姓名。对日期信息进行修改时要进行检验。 4、实现层次递进的方式显示整个家谱,显示结果应该体现家谱树的结构。 6.4.2选作功能 1、容许重新指定父亲。 2、容许修改本人姓名。如果节点中都保存有父亲姓名,则本人的所有孩子应同步修改。 6.4.3关键算法提示 1、采用先序遍历二叉树的方式查询节点信息。 2、采用后序遍历的方式删除节点。 3、成员信息的层次化显示应该充分利用辈分信息。如图2所示的家谱显示结果可以如图7所示(容许其它显示方式,能体现家谱树的结构即可) 图7 家谱信息层次化显示示意图 6.5阶段任务五(8学时) 6.5.1基本功能 1、按各种关键字进行查询

文档评论(0)

almm118 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档