约瑟夫环问题有多种变形,比如顺时针转改为逆时针等,虽然问题的细节有多种变数,但解决问题的中心思想是一样的,即使用循环链表。 通过以上的分析,我们可以尝试编写 C 语言代码,完整代码如下所示: ———————————— typedefstruct node{ int number; structnode * next; }person; person * i
2、 输出的形式:int型; 3、 程序所能达到的功能:构造链表;输入数据;执行报数;储存出列人的序号,删除出列人的信息以及把指向出列人的指针移到出列人的下一个人,然后重新开始执行报数;直到最后一个人报数完毕,程序结束。 4、 测试数据:n=9,9个人的序号分别为:1,2,3,4,5,6,7,8,9。然后b=1,从第一...
初始化线性表 根据输入的总人数M,依次编号,循环创建链表。 // 初始化线性表LinkList*InitList(LinkList*L,intn){LinkList*p,*r;if(n==0){returnERROR;}L=(LinkList*)malloc(sizeof(Node));srand(time(0));//生成随机种子 作为初始的dataL->data=rand()%100;L->next=NULL;//头节点 Next域置空r=...
move -> payload); if (tail == move ) tail = save_previous ;//更新约瑟夫环 free(move); printf("当前结点:\n"); traverse_joseph_circle (tail) ; move = save_previous ; count = 0
创建循环链表 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语言循环链表)学习 2020-2-23 约瑟夫环问题: 已知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...
图1 循环链表 循环链表和动态链表相比,唯一的不同就是循环链表首尾相连,其他都完全一样。 实际应用:约瑟夫环问题 约瑟夫环问题,是一个经典的循环链表问题,题意是:已知 n 个人(以编号1,2,3,…,n分别表示)围坐在一张圆桌周围,从编号为 k 的人开始顺时针报数,数到 m 的那个人出列;他的下一个人又从 1 ...
循环链表实现约瑟夫环 约瑟夫环问题,是一个经典的循环链表问题,题意是:已知 n 个人(分别用编号 1,2,3,…,n 表示)围坐在一张圆桌周围,从编号为 k 的人开始顺时针报数,数到 m 的那个人出列;他的下一个人又从 1 开始,还是顺时针开始报数,数到 m 的那个人又出列;依次重复下去,直到圆桌上剩余一个人。
约瑟夫环,杀人游戏(静态循环链表实现) 觉得用静态循环链表最划算了。 1、动态链表要动态分配,指针移来移去,释放指针等等,弄得很烦,容易出错。 2、用循环链表是当然的了。 // DS: 似循环静态链表 #include <iostream> #include <cstdio> //#include <cstdlib> using namespace std; int Kill_You( const ...