- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
2013约瑟夫环数据结构实验报告
数据结构上机实验报告1、需求分析 1:用一个循环链表实现n个人按顺时针排成一圈,每个人看作一个节点,每个节点都是一个结构体类型,包含三个域: 序号域(data), 密码域(key),指向下一个人的指针域(next). 2:程序开始时由用户任意输入人数n及一个正整数作为报数上限值m,一个正整数作为密码最大值,判断所输密码是否在范围内。然后为依次每一个人指定一个密码 3:初始密码为用户外部输入的密码m, 从第一个人开始按顺市针方向自1开始报数.,报道m的时停止,报m的人出列,将他的密码作为新的密码值(m), 从他在顺针方向的下一个人开始重新从1报数,如此下去,直至所有的人全部出列为止. 4:本程序最终结果为n 的人的出列顺序 5:测试数据: m的初值为1; n =5(即有5个人)57个人的密码依次为:1,2,3,4,5.首先没的值为1,正确的出列顺序应为1,2,4,3,5。2概要分析抽象数据类型的定义:为实现上述程序的功能,可以用整数存储用户的输入。并将用户输入的值存储于线性表中。算法的基本思想:约瑟夫环问题中的数据是人所在的位置,而这种数据是存在“第一元素、最后元素”,并且存在“唯一的前驱和后继的”,符合线性表的特点。由于需要模拟约瑟夫环的出列问题,可以采用顺序表来实现线性表,完成出列顺序的输出。核心算法主要分为两步:1、确定需要删除的位置,2、设置并删除该位置。已知报数间隔m,我们可以把当前位置加上m获得需要删除的位置,如果获得的位置超过顺序表中实际元素的总长度,则可以通过减去数组的实际长度来修正(即模拟环状计数)。然后把顺序表中的当前指向位置设置为该位置,继而删掉该位置。反复进行上述确定位置和删除位置的操作,直到顺序表为空。主程序的流程:程序由三个模块组成:(1)输入模块:无提示语句,直接输入总人数n和报数次数m,中间用逗号隔开。(2)构造链表并输入每个人信息模块:(3)主要处理出列的函数:分别在DOS下和文件中,按移除元素的顺序依次显示其位置。3、详细设计?1.本程序包含三个模块 1) 主程序模块?int main()?{ int m,n,i=0; LinkList s; printf(请输入报数上限m和人数n:\n);? do{ if(i0) printf(输入有误,请重新输入:\n); scanf(%d,m); ? getchar(); scanf(%d,n); getchar(); i++; }while(m = 0 || n = 0); s=CreatList_L(n); ListDelete_L(s,m,n); return 0;?} 2) 构造链表并输入每个人信息模块;LinkList L,r,q;?int i,key;?printf(请输入%d个数字作为每个人的密码:\n,n);?for(i=1;i=n;i++)?{ scanf(%d,key);? //输入每个人的密码 r=(LinkList)malloc(sizeof(LNode)); if(i==1) { L=q=r; } else{ q-next=r; q=r; } r-num=i;? r-pwd=key; ?}?r-next=L; //使最后节点指向首节点,形成循环链表?return L; //向主函数返回创建完成的循环链表首节点的地址}3)主要处理出列的函数:void ListDelete_L(LinkList L, int m, int n){?LinkList p,s;?int j;?while(n0){//只要人数大于0就继续,直到全部出列 p=L; for(j=1; jm; j++){? //顺序找到第m个节点(人)并使指针指向该节点 s=p; p=p-next; } printf(出列人原来的序号是:%d\n,p-num); //输出出列人序号 m=p-pwd; //将出列人的密码作为新的报数值m s-next=p-next;//将出列的节点(人)从循环链表中删除 L=p-next; free(p); n--;?}}4、调试分析(1)编写程序时,指针运用不熟练,导致调试时错误过多,花费了太多时间,后通过对指针相关知识的进一步了解,改正了程序中的错误,正确运行了程序。(2)数据结构是一门比较抽象的课程,但是也是一门最基础的课程学的过程。在现实生活的也非常广泛通过设计该实验让我更加深刻的掌握了有关链表的知识,同时也认识到了自己在平时学习当中的盲点。通过这次实验发现了自己在数据结构这门功课上存在严重的不足。链表中的指针理解不够,运用不够熟练,常常出现一些莫名其妙的问题,调试费时太多。今后一定会多编程,多思索。在以后的学习过程中还需要不断的完善学习,希望能把数据结构这门课学习的更加深入,更加透彻。5、测试结果6、附录#includestd
您可能关注的文档
最近下载
- 秋季安全生产培训ppt.pptx VIP
- (完整word版)护理安全(不良)事件报告制度及工作流程.docx VIP
- 体育教学工作总结学情分析报告(共8).docx VIP
- 内部审核工作程序.pdf VIP
- 怪物猎人3金手指素材代码.doc VIP
- 马工程-中国古代文学史(第二版)第三编上册魏晋南北朝文学PPT课件-50109.docx VIP
- 传统节日中秋节介绍英文版ppt课件.pptx VIP
- 销售合同管理excel表格系统 台账登记统计 到期提醒Excel表格模板 (9).xlsx VIP
- 刘毅5000词汇.doc VIP
- 《单相全桥逆变器死区效应分析及补偿方法》-毕业论文(设计).doc VIP
文档评论(0)