下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
数学与计算机学院约瑟夫环问题实验报告年级10级学号2010434062姓名成绩专业电气信息(计算机类)实验地点主楼402指导教师史青宣实验项目约瑟夫环问题实验日期2011年12月26日一、实验目的本实验的目的是进一步理解线性表的逻辑结构和存储结构,进一步提高使用理论知识指导解决实际问题的能力。二、实验问题描述设编号为1,2,···,n的n个人围坐一圈,约定编号为k(1≤k≤n)的人从1开始报数,数到m的那个人出列,他的下一位又从1开始报数,数到m的那个人又出列,依次类推,直到所有人出列为止,由此产生一个出队编号的序列。三、实验步骤1、实验问题分析①由于当某个人退出圆圈后,报数的工作要从下一个人开始继续,剩下的人仍要是围成一个圆圈,可以使用循环表;由于退出圆圈的工作对应着表中结点的删除操作,对于这种删除操作频繁的情况,应该选用效率较高的链表结构;为了程序指针每一次都指向一个具体的代表一个人的结点而不需要进行判断,链表不带表头结点。所以,对于所有人围成的圆圈所对对应的数据结构采用一个不带头结点的循环链表来描述。设头指针为p,并根据具体情况移动可以采用数据类型定义:Typedefstructnode{intnumber;structnode*next;}Lnode,*Linklist;②为了记录退出的人的先后顺序,采用一个顺序表进行存储,程序结束后再输入依次退出的人的编号顺序。由于只记录各个结点的number值就可以,所以定义一个整型一维数组。如“intquite[N];”N为一个根据实际问题定义的一个足够大的整数。2、功能(函数)设计根据上述分析,该算法可以由3个功能函数实现。Main()用做数据的输入和函数的调用,Init()做链表的初始化工作,使用Josephus()做删除结点和保存输出顺序的工作,OutRing()完成序列的输出工作。1.建立单循环链表函数LinkListInitRingList(intn);2.产生Josephus顺序函数voidJosephus(LinkListL,intn,intk,intm,intquit[N])3.输出顺序表voidPrint(intn,intquit[N])四、实验结果(程序)及分析1.实验的的源代码://约瑟夫环问题.cpp:Definestheentrypointfortheconsoleapplication.////#include"stdafx.h"#include"iostream.h"#defineN34typedefstructNode{ intdata; structNode*next;}Lnode,*LinkList;LinkListInitRingList(intn)//尾插法建立单循环链表{ Lnode*L,*r,*s; L=newLnode;//不带头结点 r=L; for(inti=1;i<n;i++) { s=newLnode; r->data=i; r->next=s; r=s; } r->data=n; r->next=L;//链表首尾相连 L=r;//L指向循环链表的尾结点 returnL;}voidJosephus(LinkListL,intn,intk,intm,intquit[N]){ inti,j; Lnode*p,*q; p=L; for(intr=1;r<m;r++) p=p->next; for(i=0;i<n;i++) { for(j=1;j<=k-1;j++) p=p->next; q=p->next; p->next=q->next; quit[i]=q->data; deleteq; }}voidPrint(intn,intquit[N]){ inti; for(i=0;i<n;i++) cout<<quit[i]<<""; cout<<endl;}intmain(intargc,char*argv[]){ LinkListL; intn; intk; intm; cout<<"请输入围坐一圈的人数n的值:"<<endl; cin>>n; L=InitRingList(n); intquit[N]; cout<<"约定从编号为m的值开始数,请输入m的值:"<<endl;cin>>m; while(m>n||m<1) {cout<<"输入错误,请重新输入:"<<endl; cin>>m; } cout<<"要求数到k的人出列,请输入k的值:"<<endl; cin>>k; cout<<"顺序为:";Josephus(L,n,k,m,quit); Print(n,quit); return0;}2.测试数据A.当n的初始值为7,k的值为5,m的值为1时,正确的出列顺序为:5、3、2、4、7、1、6,经程序运行测试,结果如下:可知程序运行正确。B.程序的容错性测试,当输入m的值不符合问题约定时,应有错误提示给用户,指导用户正确输入,并做出相应处理,保证程序运
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 丁苯橡胶装置操作工岗前竞争分析考核试卷含答案
- 2025呼伦贝尔扎兰屯市中小学教师竞争性比选62人备考题库附答案
- 淀粉加工工岗前安全文明考核试卷含答案
- 玻璃钢制品喷射工安全文化水平考核试卷含答案
- 电工合金熔炼及热变形工安全风险能力考核试卷含答案
- 地毯设计师岗前设备考核试卷含答案
- 炭素压型工诚信道德模拟考核试卷含答案
- 玻纤制品后处理工岗前技术基础考核试卷含答案
- 2024年黑龙江省特岗教师招聘真题汇编附答案
- 2024年豫章师范学院辅导员考试笔试真题汇编附答案
- 人工智能推动金融数据治理转型升级研究报告2026
- 2026长治日报社工作人员招聘劳务派遣人员5人备考题库含答案
- 期末教师大会上校长精彩讲话:师者当备三盆水(洗头洗手洗脚)
- 2026年潍坊职业学院单招综合素质笔试备考试题附答案详解
- 工兵基础知识课件
- 2026年贵州省交通综合运输事务中心和贵州省铁路民航事务中心公开选调备考题库及答案详解参考
- 2025四川雅安市名山区茗投产业集团有限公司招聘合同制员工10人参考题库附答案
- 人工智能应用与实践 课件 -第5章-智能体开发与应用
- 2025浙江绍兴越城黄酒小镇旅游开发有限公司编外人员第二次招聘总笔试历年典型考点题库附带答案详解2套试卷
- 聘用2025年3D建模合同协议
- 2025-2026学年西南大学版小学数学六年级(上册)期末测试卷附答案(3套)
评论
0/150
提交评论