约瑟夫环问题,是一个经典的循环链表问题,题意是:已知 n 个人(分别用编号 1,2,3,…,n 表示)围坐在一张圆桌周围,从编号为 k 的人开始顺时针报数,数到 m 的那个人出列;他的下一个人又从 1 开始,还是顺时针开始报数,数到 m 的那个人又出列;依次重复下去,直到圆桌上剩余一个人。 如下图所示,假设此时...
循环链表实现约瑟夫环 约瑟夫环问题,是一个经典的循环链表问题,题意是:已知 n 个人(分别用编号 1,2,3,…,n 表示)围坐在一张圆桌周围,从编号为 k 的人开始顺时针报数,数到 m 的那个人出列;他的下一个人又从 1 开始,还是顺时针开始报数,数到 m 的那个人又出列;依次重复下去,直到圆桌上剩余一个人。
2、 输出的形式:int型; 3、 程序所能达到的功能:构造链表;输入数据;执行报数;储存出列人的序号,删除出列人的信息以及把指向出列人的指针移到出列人的下一个人,然后重新开始执行报数;直到最后一个人报数完毕,程序结束。 4、 测试数据:n=9,9个人的序号分别为:1,2,3,4,5,6,7,8,9。然后b=1,从第一...
// 链表遍历到开始位置LinkList*ListStart(LinkList*L,intn){for(inti=0;i<n;i++){L=L->next;//通过不断地指向下一个节点找到开始节点的位置}returnL;} 调试观察 第三步: 固定步长循环删除节点 //循环删除节点StatusListDelete(LinkList*L,intn){LinkList*q;do{for(inti=1;i<n;i++)//固定步长...
实际应用:约瑟夫环问题 约瑟夫环问题,是一个经典的循环链表问题,题意是:已知 n 个人(以编号1,2,3,…,n分别表示)围坐在一张圆桌周围,从编号为 k 的人开始顺时针报数,数到 m 的那个人出列;他的下一个人又从 1 还是顺时针开始报数,数到 m 的那个人又出列;依次重复下去,要求找到最后出列的那个人。
约瑟夫问题是个有名的问题:N个人围成一圈,从第一个开始报数,第M个将被杀掉,最后剩下一个,其余人都将被杀掉。例如N=6,M=5,被杀掉的顺序是:5,4,6,2,3,1。 使用环链表解决约瑟夫环问题的算法如下: #define_CRT_SECURE_NO_DEPRECATE#define_CRT_SECURE_NO_WARNINGS#include<stdio.h>#include<stdlib.h...
so所以采用循环链表来做===》这里采用了单向循环链表 定义结点 头结点定义刚开始我理解了好久。 typedef ===》它的意思是将一个自己命名的类型用已经有的类型来代替, typedef int Elemtype 意思是 int这个整形变量 现在换了个名字 叫做 Elemtype, 像定义整形变量 int b; ...
先创建一个链表,链表的长度就是n 从第s个节点开始循环 判断是否是第m个数 如果是第m个数,就输出并删除当前节点 循环到最后一个节点,再从第一个节点接着循环 主要代码: void yuesefu (LinkList * head, int n, int s, int m) { LinkList * p, * r, * q; ...
创建循环链表 void Delete_List(joseph *p,joseph *q) { q-> next= p-> next; free(p); } 1. 2. 3. 4. 5. 删除节点(本质,释放内存空间) void josephus ( joseph *L, int s, int m) { joseph *p,*q; int i; p=L; for(i=1;i<=s-1;i++) ...
约瑟夫环问题是一个经典的数学问题,在C语言中可以通过多种方式实现其解决方案。以下是几种常见的解法及其代码示例: 方法一:循环链表实现 循环链表是解决约瑟夫环问题的一种直观且有效的方法。它模拟了人们围坐成一圈的情景,通过链表的节点来表示每个人,并通过指针将节点连接成环状。 c #include<stdio.h> #...