首页 > 其他分享 >约瑟夫环问题——legend

约瑟夫环问题——legend

时间:2022-12-13 16:33:30浏览次数:47  
标签:cur int next 问题 pnode 出队 约瑟夫 linkNode legend





约瑟夫环问题:
(一)问题:
已知有n个人(编号为1,2,3...n)围坐在一个圆桌周围,从编号为k的人开始报数,数到m的那个人出队,出队的下一个位置的人继续从k开始数数,数到m的那个人继续出队,。。。,知道所有的人都出队了,求出队序列。

(二)方法一:循环链表。
(1)步骤:
1.构造一个有n个元素的循环链表,无头节点。
2.确定第一个报数人的位置;
3.不断从链表中删除节点;

(2)代码实现:

typedef struct linkNode{
DataType data;
linkNode* next;
}linkNode* creatLoopLink(int n){
static linkNode * pnode;
pnode=(linkNode*) malloc(sizeof(linkNode));//产生一个新节点;
pnode->data=1;
pnode->next=NULL; LinkNode* curNode,*lastNode=pnode;
for(int i=2;i<=n;i++){
curNode=(linkNode*) malloc(sizeof(linkNode));//产生一个新节点
curNode->data=i;
curNode->next=NULL; lastNode->next=curNode;//尾接法创建一个链表
lastNode=curNode;
} lastNode->next=pnode;//最后一个节点的尾部连接头。
return pnode;
} /*
从循环链表link中,不断删除编号为m的节点。
k表示起始读数;
m要删除的编号
n为节点个数
*/
deleteNode_m(linkNode* link, int k, int m ,int n){

linkNode* pre,cur=link;
for(int i=1;i<=k;i++){//定位到第k个节点,即第一个报数的人。
pre=cur;
cur=cur->next;
} for(int i=n;i>=1;i--){//计算出队序列
for(int j=k;j<=m;j++){//从k定位到m
pre=cur;
cur=cur->next;
} pre->next=cur->next;
visit(cur->data);
free(cur); cur=pre->next;//下一个从删除节点的下一个开始数数。
}
}

(三)方法二:循环队列

(1)步骤:
1.初始化队列:
将编号为1,2,3....n的人依次入队;
2.定位k:
依次出队,直到m,并且将出队的元素同时插入到队尾。
3.删除m:
从k到m-1,依次出队,并且入队到队尾,m直接出队,不再入队。

4.下一个k的位置,就是不再入队的m的下一个元素。循环3、直到全部删除。


标签:cur,int,next,问题,pnode,出队,约瑟夫,linkNode,legend
From: https://blog.51cto.com/u_15911260/5934635

相关文章

  • 完美洗牌问题
    完美洗牌问题:(一)有长度为2n的数组{a1,a2...an,b1,b2...bn},希望排序后为{a1,b1,a2,b2...an,bn},希望时间复杂度为O(n),空间复杂度为O(1)(二)解析:有两副牌,一个人拿的牌为a1......
  • C# 调用https接口 安全证书问题 解决方法
    原文链接: https://blog.csdn.net/lizaijinsheng/article/details/127321758说明: 如果是用https的话,由于没有证书,会报错:基础连接已经关闭:未能为 SSL/TLS安全通道建立......
  • tcp协议通信的粘包问题
    粘包问题出现的原因tcp协议是流式协议,数据和水流一样粘在一起,没有任何界限区分客户端收数据的时候没有收干净,这就会使得和下次结果混合在一起解决粘包问题的思路......
  • 关于Kubernetes集群中常见问题的排查方法的一些笔记
    写在前面学习​​K8s​​,所以整理记忆文章理论内容来源于:​​《Kubernetes权威指南:从Docker到Kubernetes实践全接触》​​第四版.第十一章这里整理学习笔记一切时代的艺......
  • javascript中setInterval越来越快的问题解决方法
    vartimerfunctionrun(){ //clearInterval要放在方法开始,不然的话,下面的代码还没运行到clearInterval,又开始了循环了。if(timer){clearInter......
  • Element组件:el-date-picker日期选择控件少一天的问题
    在使用el-data-picker时,选择的日期和存入的日期差了一天。这个是由于element-ui中时间控件的默认时间为国际标准时间,因此与北京时间差8个小时,且value-format格式错误。正......
  • 初学VUE遇见的问题
    1、关于语法糖问题:HTML如下:<selectv-model="sl"><option:value="opt.value"v-for="optinoptions">{{opt.text}}</option></select>如果不用语法糖......
  • 问题解决系列:io.grpc.netty.shaded.io.netty.handler.ssl.NotSslRecordException_ not
    问题场景最近使用公司微服务框架开发后台,要调用由​​python​​​写的服务端接口。这里我们是使用了​​grpc​​​来做不同语言之间的接口调用。已知​​python​​服务端......
  • java 将小数拆分为两部分+浮点型精度丢失问题
    问题:将一个String类型的小数拆分为整数部分和小数部分,如9.9拆分为9和0.91.将小数的整数和小数部分拆分开publicfloatnumberSub(StringtotalMoney){floatmoneyFl......
  • 解决 Eclipse 不见 Maven 问题
    在Windows->Preferences不见Maven和File->New->Project均不见Maven,但Help->EclipseMarketplace->installed却可见已经安装,网上的各种方法都不能解决。......