约瑟夫环运行结果截图 c语言,C语言单链表实现约瑟夫环

本文详细介绍了如何使用C语言实现约瑟夫环问题。通过建立循环单链表,模拟报数过程,当报数达到设定值m时,对应节点出列。文章包含初始化链表和出列过程的代码实现,并给出了运行结果截图。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.约瑟夫环问题

编号为1,2…n的人按顺时针方向围坐一圈,每个人持有一个密码(正整数)。开始任选一个整数作为报数上限m,从第一个人顺时针自1开始顺时针报数,报到m时停止报数。报到m的人出列,将他的密码作为新的m值,从他顺时针方向上的下一个人开始重新从1报下去,如此下去,直到所有的人全部出列为止。

例如,m的初值为20;n=7,7个人的密码依次是3,1,7,2,4,8,4。求出列的顺序。

2.问题分析

1.要实现报数,必须有一个数来计数,判断是否到m。

2.出列,用单链表实现即将此节点从单链表中删除。所以,必须有两个指针,一个指向当前节点,一个指向当前节点的上一个节点。删除操作主要用这两个节点来完成。

模拟图如下,第一个数字为序号,第二个数字为密码

357c7b5dff954a96b2680c973fdafc77.jpg

3.C语言实现

C语言实现,采用不带头结点的循环单链表实现,因此我们需要一个头指针来指明链表的开始,又因为要循环,所以需要一个尾指针来指明链表的尾。

1.以下为初始化循环单链表的过程。此处注意返回值为结构体类型的指针,返回链表的头指针H

typedef struct node

{

int serial;

int code;

node *next;

}Josephring,*J

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值