约瑟夫环问题约瑟夫环问题
《数据结构》实验报告一
实验内容: 约瑟夫环问题
学号:20095101249 姓名: 程方洁
一、上机实验的问题和要求(需求分析):
[ 题目 ] 设有n个人围坐一圈,现从某个人开始报数,数到m的人出列,接着从出列的下一个人开始重新报数,数到m的人又出列,如此下去,直到所有人都出列为止。试设计一个程序求出出列顺序。要求利用单向循环链表存储结构模拟此过程,按照出列的顺序打印出各人的编号。n=8,m=3
二、程序设计的基本思想,原理和算法描述:
用不带头结点的循环链表解决该问题,设有n个人围坐在一起,...
约瑟夫环问题
《数据结构》实验
一
实验内容: 约瑟夫环问题
学号:20095101249 姓名: 程方洁
一、上机实验的问题和要求(需求分析):
[ 题目 ] 设有n个人围坐一圈,现从某个人开始报数,数到m的人出列,接着从出列的下一个人开始重新报数,数到m的人又出列,如此下去,直到所有人都出列为止。试设计一个程序求出出列顺序。要求利用单向循环链
存储结构模拟此过程,按照出列的顺序打印出各人的编号。n=8,m=3
二、程序设计的基本思想,原理和算法描述:
用不带头结点的循环链表解决该问题,设有n个人围坐在一起,现从某个人开始报数,数到m的人出列,接着从下一个人开始报数,数到m的人又出列,如此下去,直到所有的人全部出列。输出出队列的人的序号。
三、调试和运行程序过程中产生的问题及采取的
:
调试的时候没有正确定义各个参数的类型和正确书写输出函数。
四、源程序及注释
[ 源程序 ] 源程序:1.cpp
#include
#include
#define NULL 0
typedef struct LNode{
int data;
struct LNode *next;
}LNode, *LinkList;
void main( )
{ //不带头结点的循环链表解决约瑟夫环问题.
//设有n个人围坐一圈,现从某个人开始报数,数到m的人出列,
//接着从出列的下一个人开始重新报数,数到m的人又出列,如此下去,
//直到所有人都出列为止。求最后一个出队列的人的序号。
int N,k,i;
LinkList L,p;
printf("Please input the Number and the order:\n");
scanf("%d,%d",&N,&k);//N代表总人数,k代表出列号.
L=(LinkList)malloc(sizeof(LNode));
L->data=1;
L->next=L;//首先生成第一个结点
for(i=N;i>1;i--)
{ p=(LinkList)malloc(sizeof(LNode));
p->data=i;
p->next=L->next;
L->next=p;
}//建立循链表
p=L;
while(p->next!=p)
{ for(i=1;i!=k-1;i++)
p=p->next;
printf("%d ",p->next->data);
p->next=p->next->next;
p=p->next;
}
printf("\n");
printf("The last one is:%d\n",p->data); }
五、运行结果
输入环中元素的个数为: 8
运行结果:1 2 3 4 5 6 7 8
删除元素的位置为:3
运行结果为: 3 6 1 5 2 8 4 7
本文档为【约瑟夫环问题】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑,
图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。