1.建立n个结点(无头结点)的单向循环链表 2.从链表第一个结点开始循环计数寻找第m个结点。 3.输出该结点的id值,将该节点的password作为新的m值,,删除该结点。 4.根据m值不断从链表中删除结点,知道链表为空。 编程实现: 代码语言:javascript 复制 #include<stdio.h>#include<stdlib.h>#defineMAX100typedef str...
循环链表(约瑟夫环)思路及实现 循环链表 单链表的尾节点指向首节点,即可构成循环链表 约瑟夫环 约瑟夫问题:有 N 个人围成一圈,每个人都有一个编号,编号由入圈的顺序决定,第一个入圈的人编号为 1,最后一个为 N,从第 K (1<=K<=N)个人开始报数,数到 M (1<=M<=N)的人将出圈,然后下一个人继续从 1 ...
循环链表实现约瑟夫环 约瑟夫环问题,是一个经典的循环链表问题,题意是:已知 n 个人(分别用编号 1,2,3,…,n 表示)围坐在一张圆桌周围,从编号为 k 的人开始顺时针报数,数到 m 的那个人出列;他的下一个人又从 1 开始,还是顺时针开始报数,数到 m 的那个人又出列;依次重复下去,直到圆桌上剩余一个人。
先创建一个环形链表,用来模拟 n 个小孩围成的圈,first 指向环形链表的第一个结点(这里 first 可以移动,但寓意上 first 还是表示环形链表的第一个结点); 创建个helper的辅助变量,一开始指向环形链表的最后一个结点; 因为一开始 first 指向环形链表的第一个结点,helper一开始指向环形链表的最后一个结点,而约瑟夫问题...
循环链表实现约瑟夫环 约瑟夫环问题,是一个经典的循环链表问题,题意是:已知 n 个人(分别用编号 1,2,3,…,n 表示)围坐在一张圆桌周围,从编号为 k 的人开始顺时针报数,数到 m 的那个人出列;他的下一个人又从 1 开始,还是顺时针开始报数,数到 m 的那个人又出列;依次重复下去,直到圆桌上剩余一个人。
用循环链表实现约瑟夫环 1#include <stdio.h>2#include <stdlib.h>3typedefstructnode{4intnumber;5structnode *next;6}node;7node * initLink(intn){8node * head=(node*)malloc(sizeof(node));9head->number=1;10head->next=NULL;11node * temp=head;12for(inti=2; i<=n; i++) {13node *...
循环链表实现约瑟夫环 约瑟夫环问题,是一个经典的循环链表问题,题意是:已知 n 个人(分别用编号 1,2,3,…,n 表示)围坐在一张圆桌周围,从编号为 k 的人开始顺时针报数,数到 m 的那个人出列;他的下一个人又从 1 开始,还是顺时针开始报数,数到 m 的那个人又出列;依次重复下去,直到圆桌上剩余一个人。
循环链表实现约瑟夫环 约瑟夫环问题,是一个经典的循环链表问题,题意是:已知 n 个人(分别用编号 1,2,3,…,n 表示)围坐在一张圆桌周围,从编号为 k 的人开始顺时针报数,数到 m 的那个人出列;他的下一个人又从 1 开始,还是顺时针开始报数,数到 m 的那个人又出列;依次重复下去,直到圆桌上剩余一个人。
可以发现,用循环链表解决约瑟夫环问题是比较傻瓜的,不需要什么奇技银巧,你只需要一五一十: 造节点 找节点 删节点 就完事儿了。 运行结果: 运行截图 最终代码: #include"stdio.h"#include"malloc.h"#include"time.h"#include"stdlib.h"#define OK 1#define ERROR 0typedefintElemType;typedefintStatus;typedefstr...
约瑟夫环问题 设计一个带头结点[1]的循环单链表[2]类,实现约瑟夫环问题; 问题描述:设编号为1,2,…,n(n>0)个设计一个带头结点的循环单链表类,实现约瑟夫环问题; 问题描述:设编号为1,2,…,n(n>0)个人按顺时针方向围坐-圈,每人持有一个正整数密码。开始时任意给出一个报数上限值m从第一个人开始顺时针...