欢迎来到三一文库! | 帮助中心 三一文库31doc.com 一个上传文档投稿赚钱的网站
三一文库
全部分类
  • 研究报告>
  • 工作总结>
  • 合同范本>
  • 心得体会>
  • 工作报告>
  • 党团相关>
  • 幼儿/小学教育>
  • 高等教育>
  • 经济/贸易/财会>
  • 建筑/环境>
  • 金融/证券>
  • 医学/心理学>
  • ImageVerifierCode 换一换
    首页 三一文库 > 资源分类 > DOC文档下载  

    约瑟夫环问题 实验报告完整版.doc

    • 资源ID:5734549       资源大小:62KB        全文页数:5页
    • 资源格式: DOC        下载积分:2
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录   微博登录  
    二维码
    微信扫一扫登录
    下载资源需要2
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    约瑟夫环问题 实验报告完整版.doc

    实验报告实验课名称:数据结构实验一实验名称:约瑟夫环问题班级 000学号 000姓名 神刀公子时间 1.问题描述约瑟夫环问题(1)问题描述设有编号为1,2,n的n(n0)个人围成一个圈,每个人持有一个密码m。从第一个人开始报数,报到m时停止报数,报m的人出圈,再从他的下一个人起重新报数,报到m时停止报数,报m的出圈,如此下去,直到所有人全部出圈为止。当任意给定n和m后,设计算法求n个人出圈的次序。(2)基本要求建立模型,确定存储结构。对任意n个人,密码为m,实现约瑟夫环问题。出圈的顺序可以依次输出,也可以用一个数组存储。(3)思考:采用顺序存储结构如何实现约瑟夫环问题?如果每个人持有的密码不同,应如何实现约瑟夫环问题?2.数据结构设计由于约瑟夫环问题本身具有循环性质,考虑采用循环链表,为了统一对表中任意结点的操作,循环链表不带头结点。将循环链表的结点定义为如下结构类型:struct Node int data; /数据域 Node *next; /next指针指向下一个结点;3.算法设计问题要求建立模型,确定存储结构,之后对任意n个人,密码为m,实现约瑟夫环问题,出圈的顺序可以依次输出,也可以用一个数组存储。设计流程图如图1.1所示。开始输出提示语输入所需参数创建链表,计算,得出结果输出结果结束图1.1 设计流程图(1)创建循环链表由于内容的要求以及问题的方便,用循环链表作为本次实验的抽象数据类型。申请一个结点作为第一个结点,之后调用creat_list函数将后续结点一次插入链接,构造为循环链表。NODE *link(int number) NODE *head=NULL,*p=NULL,*q=NULL; int i=1; head=(struct node*)malloc(sizeof(struct node); head->value=i; p=head; for(i=2; i<=number; i+) q=(struct node*)malloc(sizeof(struct node); if(q=0) return 0; p->next=q; p=q; p->value=i; p->next=head; return head;(2)约瑟夫环报数的算法在运行为循环方式,报数者除非本身已经出去,否则继续顺序报数,其报数循环的代码为void Joseph(NODE *p,int number,int n) int i,j; NODE *q=NULL; for(i=1; i<=number; i+) for(j=1; j<n-1; j+) p=p->next; q=p->next; p->next=q->next; p=p->next; printf("第%3d个出圈的人是:%3dn",i,q->value); free(q); scanf("n"); p->next=NULL;(3)主程序执行主程序运行,调用函数,程序接受数据后,输出出圈列数。printf("请输入总人数n和密码m:n"); scanf("%d",&number); scanf("%d",&n); NODE *head=NULL; head=link(number); Joseph(head,number,n); system("PAUSE");return 0;4界面设计程序无需复杂的界面设计,包含输入提示功能和输出提示功能。5.运行测试与分析(1)输出提示 ,如图1.2所示。(2)根据提示,输入圈内人数n和每个人持有的密码m 如图1.3所示。(3)输出结果如图1.4所示分析6.实验收获及思考 通过该实验,我进一步增强了对于链表的理解,也对链表的操作和实现更为熟悉,熟练掌握了如何实现置空表、求表的长度、取结点、定位运算、插入运算、删除运算、建立不带头结点的单链表(头插入法建表)、建立带头结点的单链表(尾插入法建表),输出带头结点的单链表等操作。同时,锻炼了实际操作时的动手能力。教师评分:教师签字:

    注意事项

    本文(约瑟夫环问题 实验报告完整版.doc)为本站会员(李医生)主动上传,三一文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一文库(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    经营许可证编号:宁ICP备18001539号-1

    三一文库
    收起
    展开