- 1、本文档共9页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
《数据结构与算法》实验报告
专业班级姓名学号
实验项目
实验一二叉树的应用
实验目的
1、进一步掌握指针变量的含义及应用。
2、掌握二叉树的结构特征,以及各种存储结构的特点及使用范围。
3、掌握用指针类型描述、访问和处理二叉树的运算。
实验内容
题目1:编写一个程序,采用一棵二叉树表示一个家谱关系。要求程序具有如下功能:
(1)用括号表示法输出家谱二叉树,
(2)查找某人的所有儿子,
(3)查找某人的所有祖先。
算法设计分析
(一)数据结构的定义
为了能够用二叉树表示配偶、子女、兄弟三种关系,特采用以下存储关系,则能在二叉树上
实现家谱的各项运算。
父
妻
子1
子妻1
子2
孙1
子妻2
孙2
二叉树型存储结构定义为:
typedefstructSNODE
{charname[MAX];//人名
structSNODE*left;//指向配偶结点
structSNODE*right;//指向兄弟或子女结点
}FNODE;
(二)总体设计
实验由主函数、家谱建立函数、家谱输出函数、儿子查找函数、祖先查找函数、结点定位函
数、选择界面函数七个函数共同组成。其功能描述如下:
(1)主函数:统筹调用各个函数以实现相应功能
voidmain()
(2)家谱建立函数:与用户交互建立家族成员对应关系
voidInitialFamily(FNODE*head)//家谱建立函数
(3)家谱输出函数:用括号表示法输出家谱
输出形式为:父和母(子1和子妻1(孙1),子2和子妻2(孙2))
voidPrintFamily(FNODE*head)//家谱输出函数
2
(4)儿子查找函数:在家谱中查找到某人所有的子女并输出,同时也能辨别出其是否为家
族成员与是否有子女
voidFindSon(FNODE*b,charp[])//儿子查找函数
(5)祖先查找函数:在家谱中查找到某人所有的祖先并输出,同时也能辨别出其是否为家
族中成员。
intFindAncestor(FNODE*head,charson[])//祖先查找函数
(6)结点定位函数:在家谱中找到用户输入人名所对应的结点。
FNODE*findnode(FNODE*b,charp[])//结点定位函数
(7)选择界面函数:为便于编写程序,将用户选择部分独立为此函数。
voidPRINT(intn)
(三)各函数的详细设计:
voidInitialFamily(FNODE*head)//家谱建立函数
1:首先建立当前人的信息,将其左右结点置为空,
2:然后让用户确定其是否有配偶,如果没有配偶,则当前程序结束,
3:如果有则建立其配偶信息,并将配偶结点赋给当前人的左结点;
4:再让用户确定其是否有子女,如果有则递归调用家谱建立函数建立子女结点,并将其
赋给配偶结点的下一个右结点。
5:如无,则程序结束
voidPrintFamily(FNODE*head)//家谱输出函数
1:首先判断当前结点是否为空,如果为空则结束程序;
2:如果不为空,则输出当前结点信息,
3:然后判断其左结点(配偶结点)是否为空,如不为空则输出“和配偶信息。
4:再判断配偶结点的右结点是否为空,如不为空则递归调用输出其子女信息,最后输出
“)”;
5:当配偶结点为空时,则判断其右结点(兄弟结点)是否为空
6:如果不为空,则输出“,”,并递归调用输出兄弟信息
7程序结束
FNODE*findnode(FNODE*b,charp[])//结点定位函数
1:当前结点是否为空,为空则返回空;
2:如果和查找信息相同,则返回当前结点;
3:如不然,则先后递归访问其左结点,再不是则递归访问右结点
voidFindSon(F
您可能关注的文档
- 新学期教学工作计划大纲五篇.pdf
- 新外研版高中英语必修二单词表.pdf
- 新冠肺炎疫情防控期间安全生产风险及管控措施.pdf
- 新人教版英语必修一_Welcome Unit 单元整体教学设计-听讲课(第1课时).pdf
- 新人教版九年级道德与法治下册《二单元 世界舞台上的中国 第三课 与世界紧相连 与世界深度互动》教.pdf
- 新上岗人员日常监督评价.pdf
- 文言文虚词解释.pdf
- 文明寝室倡议书.pdf
- 文化自信为主题作文(精选)7篇.pdf
- 文具店创业策划书.pdf
- 2024年自考《现代媒体总论》章节试题及答案.pdf
- 2024年四年级下学期语数英知识点总结(外研社).pdf
- 2024年卫生系统事业单位招聘《护理学专业知识》考试题库.pdf
- 2004、2008-2021年宁波大学硕士研究生考试871高等代数真题.pdf
- 2013-2021年宁波大学硕士研究生考试891理论力学(甲)真题.pdf
- 2021年温州大学硕士研究生考试623有机化学Ⅱ初试真题.pdf
- (外研版)高中英语必修第三册单词表背诵与默写.pdf
- 2024年三年级下册英语期中考试复习.pdf
- 2004-2012、2017-2021年宁波大学硕士研究生考试912信号与系统真题.pdf
- 2023年执业药师(药学四科合一)考试题库.pdf
文档评论(0)