![点击分享此内容可以赚币 分享](/master/images/share_but.png)
数据结构课程设计(家族关系查询系统).doc
《数据结构课程设计(家族关系查询系统).doc》由会员分享,可在线阅读,更多相关《数据结构课程设计(家族关系查询系统).doc(28页珍藏版)》请在咨信网上搜索。
1、1课程设计介绍 1、1课程设计项目简介 家谱就是一种以表谱形式,记载一个以血缘关系为主体得家族世系繁衍与重要人物事迹得特殊图书载体.家谱就是中国特有得文化遗产,就是中华民族得三大文献之一,属珍贵得人文资料,对于历史学,民俗学,人口学,社会学与经济学得深入研究,均有不可替代得重要功能。本项目对家谱管理进行简单得模拟,以实现查瞧祖先与子孙个人信息 、插入家族成员等功能。 1、2课设题目分析本程序得实质就是完成对家谱成员信息得建立、查找、插入等功能。可以首先定义家族成员得数据结构,然后将每个功能写成一个函数来完成对数据得操作,最后完成主函数以验证各个函数功能并得出运行结果。本程序包含以下几个模块(1
2、) 建立家族关系树。此模块将构建一个家族关系,对数据初始化,构造关系树并录入数据一遍后续程序使用。(2) 添加新成员。此模块将添加一个新成员,实现对家族关系得修改。(3) 家族关系得查询。此模块将实现对家族不同关系得查询(4) 主程序模块。此模块实现整个程序得进入与进出,以及各种初始化处理。1、课程题目原理与数据结构 因为家族得成员之间存在一个对多个得层次结构关系,所以不能用线性表来表示与实现。家谱从形状上瞧像一颗倒长得树,所以用树结构来表示比较合适。树形结构就是一类非常重要得非线性数据结构,直观瞧来树就是以分支关系定义得层次结构. 因此本课程设计可以采用得数据结构有树状结构与队列。树状结构采
3、用三叉链表来实现,队列采用链式队列实现。1、4功能分析说明图家族关系查询系统退出系统打开一个家族关系按关系查找各个家庭成员建立一个家族关系添加一个家庭成员查找一个成员得兄弟查找一个成员得祖先查找成员得子孙后代查找一个成员得孩子查找成员得堂兄弟查找成员祖先路径查找成员就是第几代查找一个成员双亲2 分析与实现 2、1 基本数据结构与栈队得操作2.1。 结点基本数据结构与链队得定义/家族关系树实现*#incldestrin、#incl mllo、incldeiits、hnclstdi、ludestlib、hincludeo、#includemath、h#inluefronplqu-rea=NUL;
4、elepinf(”内存不足!”);retrn NL; rturnpqu;int Queemt(LinQueue pl)/* 判断链接表示队列就是否为空队列*/ eur(lqunt=NULL);voi LueEQuu(LinQuu plq,TriTe *)* 进队列 Noe *p(de )maloc(sizeo(Node)); i(p=ULL) printf(”内存分配失败!n); es inf=x; -ne=NUL; if(pqufrnt=ULL) 原来为空队*/ plqufn=p; els lqu-rear-x=p; pluer=p; int QuueDQuee(inkQueue*lqu,T
5、riTre *x)/* 出队列 Node *p; (lufron=NULL)pritf(队列空!n”);eturn EROR; else p=plqu-fot;x=p-io; plqurnt=plufronext; fee();retrnOK; TiTree LueFrnt(LinkQueue *plqu)/在非空队列中求队头元素*/return(lqufront-info);2、2建立家族关系221 建立家族关系并存入文件 基本思想:首先输入家族关系得名称,以此名称为文件名,建立文本文件接下来按层次输入结点信息,输入一个在文件中写入一行同时将输入得信息保存 到二位字符数组fmiy中。字符数组
6、famil就是全局变量,存储临时信息 、 注意,输入时每个结点信息占一行,一个结点有多个兄弟,以“”作为兄弟结束标志,结点若无孩子,直接以“代替。依次输入各节点信息,以“#” 作为结束标志。最后使用函数CretrTee建立家族关系树、lixianliguoyu liguojun liguoqiangliyongzhi liyongrui liyongmingliwende liwenjia TrTee *Create(DaaTypefamilynMAXNUM) 建立家族关系并存入文件/in i; /* i控制faly数组下标/taTye ch,srMAN; /*ch存储输入得y或n,str存储
7、输入得字符串TriT *t;FI fp;stcy(name,famlname); / 以家族名为文本文件名存储*/srct(name,、tx”);fp=fpen(fname,”); *以读取方式打开文件/ (fp) / 文件已存在*/fcos(fp);pinf(%s 得家族关系已存在!重新建立请按“Y”,直接打开请按“”,familyname);ch=ch();getcha(); /接收回车/i(h=N|ch=n)tOpe(amlyna);/ 直接打开*/etur t;if(!f|h=Y|c) 重新建立,执行以下操作*=foe(fnam,”w”); 以写入方式打开文件,不存在则新建*/prin
8、tf(请按层次输入结点,每个结点信息占一行n”);pintf(”兄弟输入结束以“”为标志,结束标志为“#”n、 );gs(st);fpts(t,fp);putc(n,f);stcp(familyi,tr); /* 将成员信息存储到字符数组中*/i+; *faily数组下标后移/while(str0!=#) pritf(、 ”); /以点提示符提示继续输入/ges(str);fputs(sr,fp); / 写到文件中,每个信息占一行/fptc(n,f);srcpy(famil,str);/将成员信息存储到字符数组中/+; /faily数组下标后移*/fose(f); /* 关闭文件/=TrTre
9、ereate(); 根据fmily数组信息创建三叉树*pintf(家族关系已成功建立!”);rurn ; 返回树2。建立家族关系树基本思想:采用指针数组作为指针,保存输入得结点地址。队列得尾指针指向当前结点。头指针指向当前结点得双亲结点。输入得结点信息已存储在字符数组al中。将信息复制到字符串数组“ch中 ,如果”ch不就是“”,则建立一个新结点。若新结点就是第一个结点,则它就是根结点,将其入队,指针tree指向这个根节点;如果不就是根结点,则将当前结点链接到双亲结点上,即当前结点得双亲指针就就是队头元素,然后将当前结点入队列.接着判断fag得值,如果flag=,表示当前结点没有左孩子,那么当
10、前结点就就是双亲得左孩子。否则,当前结点就就是双亲得右孩子.用指针rot指向刚刚入队得结点.继续复制数组famil得下个元素。如果“c” 就是。则fag=0(因为“”后面得第一个孩子为左孩子),同时判断“”就是否就是第一次出现,如果就是第一次,则令标志ta;如果不就是第一次出现.则出队列,ot指向队头元素(实际上ot总就是指向双亲结点)。继续复制ily得下一个元素。知道遇到“”结束。函数返回指针ree。 /建立家族关系树*/Tree TireeCrete()TriTee *t,x=ULL,*tree,*ot=ULL;LnkQuue QueueCreaeEmpty();/建立一个空得队列,存储指
11、向树得指针*/int i=,fag0,stt=0;DatapesrMANUM; /存放faml数组中信息*/strpy(str,famlyi); 复制*/i+; /* amily数组下标后移while(tr0!=) / 没遇到结束标志继续循环while(str0!=) /* 没遇到兄弟输入结束标志继续/if(o=ULL) / 空树/rot=(TriTre *)alloc(zeof(TriTre);/ 申请空间*/strcpy(roodata,st);root-paent=U;rot-lhidULL;ootrcld=NUL;LQueeEnQuee(q,rot); /将ro存入队列*/tree=r
12、oot;else /* 不为空树*t=(TiTre *)mallo(sizo(TrTree);/ 申请空间*/strcpy(tdata,str);-lchdNULL;-rhildNUL;tpret=LQeueGront(); /当前结点得双亲为队头元素LueuEnQueue(q,t); /入队*/if(!fag) /* lg为,当前结点没有左孩子*rolcid=t;els la为,当前结点已有左孩子*/rtrchd=t;ot; *root指向新得结点t */la=1; /* 标记当前结点已有左孩子*strcpy(str,family); i+;if(start!) /* 标记不就是第一次出现“
13、”*/LQeueuue(q,); /* 出队*/if(q-frnt!=NUL)root=QeuGeFront();/ root为队头元素/start=1; /* 标记已出现过“*fag0; /* “”后面得结点一定为左孩子*strcy(str,alyi);+;return ee; * 返回树*/2、打开一个家族关系 首先输入家族关系名,以家族名为文件名打开文件,如果家族关系不存在,返回空;如果存在,文件打开,读取文件。将文件得每行信息依次存储在数组faiy【】中。* 打开一个家族关系/TriTeeOpn(aaTpfamilyameMXUM)n =,0;DataType ch;LE fp;rre
14、 ;scpy(nae,fmilyname); /以家族名为文本文件名存储*/src(fname,”、tt”);fp=pe(name,”r); / 以读取方式打开文件/ if(fp=NUL) /*文件不存在*rin(%得家族关系不存在!n”,familame);return U;elsec=fgetc(p); / 按字符读取文件*/hl(ch!=EOF) /* 读到文件尾结束/if(ch!=n) /* ch不为一个结点信息得结尾*/mlj=ch; /*将文件信息存储到family数组中/j+; elseamilyij=0; /*字符串结束标志/i+; /* fmly数组行下标后移/j=0; /*
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 课程设计 家族 关系 查询 系统
![提示](https://www.zixin.com.cn/images/bang_tan.gif)
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【a199****6536】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【a199****6536】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。