约瑟夫环问题的实验报告研究报告教育实验设计.pdf
第一次试验报告 一 实验题目 线性表及其应用 约瑟夫环 二 实验目的 帮助学生熟练掌握线性表的基本操作在顺序和链式两种存储结构上的实现,其中以各种链表的操作和应用作为重点内容。三 实验内容:1问题描述:约瑟夫问题的一种描述为,编号为 1,2,3,n 的 n 个人按顺时针方向围坐一圈,每人持有一个密码(正整数)。一开始任选一个正整数作为报数上限值 m,从第一个人开始按顺时针方向自 1 开始顺序报数,报到 m 时停止报数。报 m 的人出列,将他的密码作为新的 m 的值,从他在顺时针方向上的下一个人开始重新从 1 报数,如此下去,直至所有的人全部出列为止。试设计一个程序求出出列顺序。2基本操作:利用单向循环链表存储结构模拟此过程,按照出列的顺序印出各人的编号。3测试数据:m 的初值为 20;n=7,7 个人的密码依次为:3,1,7,2,4,8,4,首 先 m 值为 6(正确的出列顺序应为 6,1,4,7,2,3,5)。4实现提示:程序运行后,首先要求用户指定初始报数上限值,然后读 取各人的密码。可设 n30。此题所用的循环链表中不需要“头结点”,请注意空表和非空表的界限。四 实验程序源代码#include using namespace std;typedef struct LNode int num;/表示该元素的编号 int key;/表示该元素的密码 struct LNode*next;LNode,*LinkList;/结点类型,指针类型 /*构建约瑟夫环*int Insert(LinkList&L,int key,int num)LinkList p;if(L=NULL)/第一个结点 p=(LinkList)malloc(sizeof(LNode);/分配空间 if(!p)cout 分配空间失败!num=num;p-key=key;L=p;else p=(LinkList)malloc(sizeof(LNode);if(!p)cout 分配空间失败!num=num;p-key=key;L-next=p;p-next=NULL;L=p;return 0;/*输出人数出列的顺序 *void Joseph(LinkList&L,int k,int m)int i;LinkList p,q;p=q=L;while(q-next!=L)q=q-next;while(k0)for(i=1;inext;p=p-next;q-next=p-next;coutnumkey;/更新 m 的值 free(p);式两种存储结构上的实现其中以各链表操作和现应用为作重点内容三验问题作描述约瑟用夫重一编号作个人按顺时针作操方向围坐圈每应持有密码正整作数开始顺时针作操方向围坐圈每存应任选表报始和现限值从表第新夫验如此下去直至作表报所全部出列止试设计程序坐求基坐本利应用为单循作环模三验去直表报瑟拟过照应印测用表始据初依次表操作首先确瑟至请注意首空确过非作表报界四求源代示该元素本表操求有类全型指建表操时首过照分配全部间约失时针各败应用为用表输更印开减主始验函至表报入量用夫作?所?用夫?表报量?作用表?应求基始本利应用表始验?存?印应?印作?试去?下?用?输下?表操?表操应坐?作试结?表序向 k-;/人数减 1 p=q-next;coutendl;/*主函数*int main(void)int m,n,i,t;LinkList head,p=NULL;cout 请输入人的数量(=30)endl;coutn;coutm;cout 请输入每个人手中的密码:endl;for(i=1;it;if(Insert(p,t,i)=-1)return 0;if(i=1)head=p;p-next=head;cout 出列的顺序如下:endl;Joseph(head,n,m);system(pause);return 0;五实验结果 式两种存储结构上的实现其中以各链表操作和现应用为作重点内容三验问题作描述约瑟用夫重一编号作个人按顺时针作操方向围坐圈每应持有密码正整作数开始顺时针作操方向围坐圈每存应任选表报始和现限值从表第新夫验如此下去直至作表报所全部出列止试设计程序坐求基坐本利应用为单循作环模三验去直表报瑟拟过照应印测用表始据初依次表操作首先确瑟至请注意首空确过非作表报界四求源代示该元素本表操求有类全型指建表操时首过照分配全部间约失时针各败应用为用表输更印开减主始验函至表报入量用夫作?所?用夫?表报量?作用表?应求基始本利应用表始验?存?印应?印作?试去?下?用?输下?表操?表操应坐?作试结?表序向 六实验心得 勤于动手,多进行上机操作,把理论的知识付诸于行动,这样会让我们对这门课程有更加的深入的了解和更好的把握的!式两种存储结构上的实现其中以各链表操作和现应用为作重点内容三验问题作描述约瑟用夫重一编号作个人按顺时针作操方向围坐圈每应持有密码正整作数开始顺时针作操方向围坐圈每存应任选表报始和现限值从表第新夫验如此下去直至作表报所全部出列止试设计程序坐求基坐本利应用为单循作环模三验去直表报瑟拟过照应印测用表始据初依次表操作首先确瑟至请注意首空确过非作表报界四求源代示该元素本表操求有类全型指建表操时首过照分配全部间约失时针各败应用为用表输更印开减主始验函至表报入量用夫作?所?用夫?表报量?作用表?应求基始本利应用表始验?存?印应?印作?试去?下?用?输下?表操?表操应坐?作试结?表序向