精品word学习资料可编辑
名师归纳总结——欢迎下载
一,需求分析
1,问题描述 : 设有 n 个人围坐在一个圆桌四周 , 现从第 s 个人开头报数 , 数到第 m得人出列 , 然后从出列得下一个人重新开头报数 , 数到第 m得人又出列 , ? , 如此反复直到全部得人全部出列为止;
二,程序分析
2,1 储备结构
储备结构 : 循环链表
1
1
2
3
?
n
first
2,2 关键算法分析
【设计思想】
第一 ,设计实现约瑟夫环问题得储备结构;由于约瑟夫环本身具有循环性质 ,考虑采纳循环链表 ,为了统一对表中任意节点得操作 ,循环链表不带头结点;循环链表得结点定义为如
下结构类型 :
struct Node
{
int number;
Node *next;
};
其次,建立一个不带头结点得循环链表并由头指针 first 指示;最终,设计约瑟夫环问题得算法;
【伪代码】
1,工作指针 first,r,s,p,q 初始化2,输入人数 (n)与报数 (m)
3,循环 n 次,用尾插法创建链表
Node *q;
for(int i=1;i=n;i++)
{
Node *p;
精品word学习资料可编辑
名师归纳总结——欢迎下载
p=new Node; pnumber=i; pnext=NULL; if(i==1) L=q=p; else
{
qnext=p; q=qnext;
}
}
qnext=L; if(L.=NULL){return(L);}
4,输入报数得起始人号数 k;
5,Node *q = new Node;计数器初始化 i=1;
6,循环 n 次删除结点并报出位置 (其中第一个人后移 k 个) 当 in 时
移动指针 m2 次 p=pnext; 删除 p 结点得后一结点 q q=pnext;
pnext=qnext;
*L = pnext;
报出位置后 Delete q;
计数器 i++;
【复杂度】
精品word学习资料可编辑
名师归纳总结——欢迎下载
for(int i=1;i=n;i++)
{
Node *p; p=new Node; pnumber=i; pnext=NULL; if(i==1) L=q=p; else
{
qnext=p; q=qnext;
}
时间复杂度 :O(n)
if(i==1) i+=LengthList(*L); Node *p;
p=*L;
int j=0;
while(ji2) {p=pnext;j++;} q = pnext; pnext=pnextnext;
*L = pnext;
return(q);
时间复杂度 :O(n2)
算法得空间复杂度 :O(n2)
精品word学习资料可编辑
名师归纳总结——欢迎下载
三,具体设计
#includeiostream using namespace std;
struct Node//循环节点得定义
{
int number;//编号Node *next;
};
Node *CreateList(Node *L,int n,int m);
//建立约瑟夫环函数
void Joseph(Node *L,int n,int m);
//输出每次出列号数函数
Node *DeleteList(Node **L,int i,Node *q);
//查找每次出列人得号数int LengthList(Node *L);
//运算环上全部人数函数void main//主函数
{
Node *L;
L=NULL;
//初始化尾指针
int n, m;
cout请输入人数 N:;
精品word学习资料可编辑
名师归纳总结——欢迎下载
cinn;//环得长度
if(n1){cout 请输入正整数 .;}// 人数反常处理
else
{
cout请输入所报数 M:; cinm;
if(m1){cout 请输入正整数 .;}// 号数反常处理
else
{
L=CreateList(L,n,m);// 重新给尾指针赋值Joseph(L,n,m);
}
}
system(pause);
}
Node *CreateList(Node *L,int n,int m)// 建立一个约瑟夫环 (尾插法)
{
Node *q;
for(int i=1;i=n;i++)
{
Node *p; p=new Node; pnumber=i; pnext=NULL;
精品word学习资料可编辑
名师归纳总结——欢迎下载
if(i==1) L=q=p;// 工作指针得初始化
else
{
qnext=p; q=qnext;
}
}
qnext=L;
if(L.=NULL){return(L);}// 返回尾指针
else cout尾指针反常 .endl;// 尾指针反
您可能关注的文档
- 措施项目工程工程量的计算.docx
- 工程进度款申请所需提交材料.docx
- 混凝土浇筑报验申请表.docx
- 精益建造大纲.docx
- 砌体拉结筋做法.docx
- 软件的测试用例实例(非常详细).docx
- 施工现场安全教育内容.docx
- 数据库复习题.docx
- 消防分项工程质量验收记录.docx
- 扬尘防治监理实施细则.docx
- (2026春新版)部编版八年级语文下册《第一单元》PPT课件.pptx
- 2018电力监控系统网络安全监测装置技术规范.docx
- 2022电力监控系统安全防护方案审核要点.docx
- 2014电力电缆光伏系统EN 50618欧标.docx
- (2026春新版)人教版二年级数学下册《第三单元 万以内数的认识》教案.docx
- (2026春新版)人教版二年级数学下册《第四单元 万以内的加法和减法》教案.docx
- (2026春新版)人教版二年级数学下册《综合与实践 时间在哪里》教案.docx
- (2026春新版)苏教版二年级数学下册《综合与实践 时间有多长》教案 .pdf
- (2026春新版)部编版三年级语文下册第3单元(教案).docx
- (2026春新版)部编版三年级语文下册第8单元(教案).docx
原创力文档

文档评论(0)