分享
分销 收藏 举报 申诉 / 9
播放页_导航下方通栏广告

类型数据结构实验报告范例.doc

  • 上传人:精****
  • 文档编号:2269482
  • 上传时间:2024-05-24
  • 格式:DOC
  • 页数:9
  • 大小:260.04KB
  • 下载积分:6 金币
  • 播放页_非在线预览资源立即下载上方广告
    配套讲稿:

    如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。

    特殊限制:

    部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。

    关 键  词:
    数据结构 实验 报告 范例
    资源描述:
    《数据结构与算法》实验报告 专业 班级 姓名 学号 实验项目 实验一 二叉树的应用 实验目的 1、进一步掌握指针变量的含义及应用. 2、掌握二叉树的结构特征,以及各种存储结构的特点及使用范围. 3、掌握用指针类型描述、访问和处理二叉树的运算. 实验内容 题目1:编写一个程序,采用一棵二叉树表示一个家谱关系。要求程序具有如下功能: (1)用括号表示法输出家谱二叉树, (2)查找某人的所有儿子, (3)查找某人的所有祖先。 算法设计分析 (一)数据结构的定义 为了能够用二叉树表示配偶、子女、兄弟三种关系,特采用以下存储关系,则能在二叉树上实现家谱的各项运算。 二叉树型存储结构定义为: typedef struct SNODE {char name[MAX]; //人名 struct SNODE *left; //指向配偶结点 struct SNODE *right; //指向兄弟或子女结点 }FNODE; (二)总体设计 实验由主函数、家谱建立函数、家谱输出函数、儿子查找函数、祖先查找函数、结点定位函数、选择界面函数七个函数共同组成.其功能描述如下: (1)主函数:统筹调用各个函数以实现相应功能 void main() (2)家谱建立函数:与用户交互建立家族成员对应关系 void InitialFamily(FNODE *&head) //家谱建立函数 (3)家谱输出函数:用括号表示法输出家谱 输出形式为:父和母(子1和子妻1(孙1),子2和子妻2(孙2)) void PrintFamily(FNODE *head) //家谱输出函数 (4)儿子查找函数:在家谱中查找到某人所有的子女并输出,同时也能辨别出其是否为家族成员与是否有子女 void FindSon(FNODE *b,char p[]) //儿子查找函数 (5)祖先查找函数:在家谱中查找到某人所有的祖先并输出,同时也能辨别出其是否为家族中成员。 int FindAncestor(FNODE *head,char son[ ]) //祖先查找函数 (6)结点定位函数:在家谱中找到用户输入人名所对应的结点。 FNODE *findnode(FNODE *b,char p[]) //结点定位函数 (7)选择界面函数:为便于编写程序,将用户选择部分独立为此函数. void PRINT(int &n) (三)各函数的详细设计: void InitialFamily(FNODE *&head) //家谱建立函数 1:首先建立当前人的信息,将其左右结点置为空, 2:然后让用户确定其是否有配偶,如果没有配偶,则当前程序结束, 3:如果有则建立其配偶信息,并将配偶结点赋给当前人的左结点; 4:再让用户确定其是否有子女,如果有则递归调用家谱建立函数建立子女结点,并将其赋给配偶结点的下一个右结点. 5:如无,则程序结束 void PrintFamily(FNODE *head) //家谱输出函数 1:首先判断当前结点是否为空,如果为空则结束程序; 2:如果不为空,则输出当前结点信息, 3:然后判断其左结点(配偶结点)是否为空,如不为空则输出“和配偶信息。 4:再判断配偶结点的右结点是否为空,如不为空则递归调用输出其子女信息,最后输出“)”; 5:当配偶结点为空时,则判断其右结点(兄弟结点)是否为空 6:如果不为空,则输出“,”,并递归调用输出兄弟信息 7程序结束 FNODE *findnode(FNODE *b,char p[]) //结点定位函数 1:当前结点是否为空,为空则返回空; 2:如果和查找信息相同,则返回当前结点; 3:如不然,则先后递归访问其左结点,再不是则递归访问右结点 void FindSon(FNODE *b,char p[]) //儿子查找函数 1:在家谱中定位到要查找的结点,如无则输出“查找不到此人” 2:判断其配偶结点与子女结点是否为空,为空则输出“无子女” 3:不为空则输出其配偶结点的所有右结点(子女结点)。 int FindAncestor(FNODE *head,char son[ ]) //祖先查找函数 1:先在家谱中定位到要查找的结点,如为空输出“不存在此人”,程序结束 2:先将父母结点入栈,当栈为空时程序结束, 3:栈不为空时,判断栈顶元素是否已访问过, 4:访问过,再判断是否为查找结点,如是则输出栈中保存的其祖先结点,并滤过其兄弟结点不输出;不是查找结点,则退栈一个元素 5:未访问过,则取当前栈顶元素,置访问标志-—1,同时取其右结点 6:栈不为空或当前所取结点不为空时,转到2; 实验测试结果及结果分析 (一)测试结果 (二)结果分析 (略) 实验总结 (略) 附录 实验程序代码(该部分请加注释) /*程序定义部分:*/ #include <stdio。h> #include <stdlib.h> #include 〈string.h> #define MAX 20 typedef struct SNODE { char name[MAX]; //人名 struct SNODE *left; //指向配偶结点 struct SNODE *right; //指向兄弟或子女结点 }FNODE; /*家谱建立函数*/ void InitialFamily(FNODE *&head) { FNODE *s,*r,*q; int tag; q=(FNODE *)malloc(sizeof(FNODE)); q=NULL; s=(FNODE *)malloc(sizeof(FNODE)); printf(”输入姓名:\n”); scanf("%s",,s—〉name); s-〉left=s->right=NULL; head=r=s; printf("%s是否有配偶?有 1,无 0\n”,head-〉name); //建立配偶结点 scanf("%d”,&tag); if(tag) { s=(FNODE *)malloc(sizeof(FNODE)); printf("输入其配偶姓名:\n”); scanf(”%s",s—〉name); s—>left=s-〉right=NULL; r—〉left=s; r=s; do{ //递归调用建立孩子结点 printf("%s是否还有子女?有 1,无 0\n",head->name); scanf(”%d”,&tag); if(tag) { InitialFamily(q); r->right=q; r=q; } }while(tag); } } /*家谱输出部分*/ void PrintFamily(FNODE *head) { FNODE *s; if(head!=NULL) { printf(”%s”,head—>name); //不为空时输出当前结点 if(head—>left!=NULL) //输出配偶结点 { s=head—>left; printf(”和%s(",s—〉name); PrintFamily(s—>right); //递归调用输出孩子结点 printf(”)”); } if(head—>right!=NULL) //递归调用输出兄弟结点 { printf(",”); PrintFamily(head—〉right); } } } /*结点定位函数*/ FNODE *findnode(FNODE *b,char p[]) //在家谱中定位所要查找结点 { FNODE *q; if(b==NULL) return NULL; else if(!strcmp(b—>name,p)) //如果与查找人名相同则返回该结点 return b; else { q=findnode(b-〉left,p); //否则递归调用其左结点 if(q!=NULL) return q; else return(findnode(b-〉right,p)); //递归调用右结点 } } /*儿子查找函数*/ void FindSon(FNODE *b,char p[]) { FNODE *q; q=findnode(b,p); if(q!=NULL) //存在孩子结点时输出 { q=q-〉left; if(q==NULL||q—〉right==NULL) //判断有无子女 printf("%s没有子女!\n",p); else { //输出则配偶结点的所有子女结点 q=q->right; printf(”%s子女为:”,p); while(q!=NULL) { printf(”%s ”,q-〉name); q=q—>right; } printf(”\n"); } } else printf("不存在你要查找的人!\n"); } /*祖先查找函数*/ int FindAncestor(FNODE *head,char son[]) { FNODE *p,*s; FNODE *stack[MAX]; int tag[MAX]; int top=—1,i; p=findnode(head,son); //定位结点 if(p==NULL) { printf("不存在你要查找的人!\n"); return 0; } s=head; do{ while(s!=NULL) //将其所有左结点进栈 { top++; stack[top]=s; tag[top]=0; s=s—>left; } if(top>—1) { if(tag[top]==1) //被访问过时 { if(stack[top]==p) //如果为所查找结点时输出祖先 { printf("%s祖先为:\n",son); for(i=0;i〈top;i++) { if(stack[i]—>right==stack[i+1]) //将其兄弟结点删除,只保留父母结点 i++; if(i〈top) //依次输出夫妻结点 printf(”%s",stack[i]—〉name); i++; if(i<top) printf("和%s ",stack[i]->name); } break; } top-—; } else //未访问过则访问其右结点并置访问标志 { s=stack[top]; if(top>0) { s=s->right; tag[top]=1; } } } }while(s!=NULL||top!=-1); if(top==-1) printf("查找不到%s的祖先!\n”,p); else printf("\n"); return 1; } /*选择界面函数部分:*/ void PRINT(int &n) { do{ printf("请选择:\n”); printf("1:建立家谱\n”); printf(”2:输出家谱\n"); printf(”3:查找某人所有儿子\n”); printf(”4:查找某人所有的祖先\n"); scanf("%d”,&n); }while(n〈0||n〉4); } /*主函数部分:调用选择界面函数,再依据用户的选择,调用相应函数,实现相关功能*/ void main() { FNODE *head; int n=0; char name[MAX]; head=NULL; do{ PRINT(n); switch(n) { case 1: InitialFamily(head);break; case 2: PrintFamily(head);printf("\n");break; case 3: printf(”请输入要查找的姓名:\n"); scanf(”%s”,name); FindSon(head,name); break; case 4: printf(”请输入要查找的姓名:\n”); scanf(”%s”,name); n=FindAncestor(head,name); printf(”\n"); break; default: break; } printf("是否继续?是 1,否 0\n"); scanf(”%d”,&n); }while(n==1); } 序号 项目 得分 总分 1 实验报告排版(3分) 2 算法思想分析(6分) 3 源代码(6分) 4 实验结果及分析(5分) 另注: 1、 源代码部分请附加适当的注释说明; 2、 打分的表格请置于实验报告最后一页的底端; 3、 请遵照本实验范例的文字大小和段落格式排版; 4、 实验报告双面打印; 5、 每个实验20分,5个实验共100分。 实验报告雷同者均视为未做。抄袭请慎重!
    展开阅读全文
    提示  咨信网温馨提示:
    1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
    2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
    3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
    4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前可先查看【教您几个在下载文档中可以更好的避免被坑】。
    5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
    6、文档遇到问题,请及时联系平台进行协调解决,联系【微信客服】、【QQ客服】,若有其他问题请点击或扫码反馈【服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【版权申诉】”,意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:0574-28810668;投诉电话:18658249818。

    开通VIP折扣优惠下载文档

    自信AI创作助手
    关于本文
    本文标题:数据结构实验报告范例.doc
    链接地址:https://www.zixin.com.cn/doc/2269482.html
    页脚通栏广告

    Copyright ©2010-2026   All Rights Reserved  宁波自信网络信息技术有限公司 版权所有   |  客服电话:0574-28810668    微信客服:咨信网客服    投诉电话:18658249818   

    违法和不良信息举报邮箱:help@zixin.com.cn    文档合作和网站合作邮箱:fuwu@zixin.com.cn    意见反馈和侵权处理邮箱:1219186828@qq.com   | 证照中心

    12321jubao.png12321网络举报中心 电话:010-12321  jubao.png中国互联网举报中心 电话:12377   gongan.png浙公网安备33021202000488号  icp.png浙ICP备2021020529号-1 浙B2-20240490   


    关注我们 :微信公众号  抖音  微博  LOFTER               

    自信网络  |  ZixinNetwork