循环链表实现约瑟夫环 约瑟夫环问题,是一个经典的循环链表问题,题意是:已知 n 个人(分别用编号 1,2,3,…,n 表示)围坐在一张圆桌周围,从编号为 k 的人开始顺时针报数,数到 m 的那个人出列;他的下一个人又从 1 开始,还是顺时针开始报数,数到 m 的那个人又出列;依次重复下去,直到圆桌上剩余一个人。
// 链表遍历到开始位置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++)//固定步长...
约瑟夫环问题有多种变形,比如顺时针转改为逆时针等,虽然问题的细节有多种变数,但解决问题的中心思想是一样的,即使用循环链表。 通过以上的分析,我们可以尝试编写 C语言代码,完整代码如下所示: typedefstruct node{int number;structnode * next;}person;person * initLink(int n){person * head=(person*)malloc...
循环链表(空表为只有一个空节点的表,其link指针指向自身)很容易模拟一个环,其数据域可以用来储存编号,加上链表的删除操作,可以很简单的解决约瑟夫问题。 循环链表的实现以及约瑟夫问题的解决代码如下: CircLinkedList.h:该头文件定义了一些需要实现的循环链表的基本函数以及Josephus函数: 1/*Author:catcher qyjiang24@...
C语言 循环链表之约瑟夫问题及其进阶 一、约瑟夫问题描述 约瑟夫环是一个数学的应用问题:已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围。从编号为k的人开始报数, 数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列。
1. 理解约瑟夫环问题的基本规则和求解方法 基本规则:n个人围成一圈,从第一个人开始报数,数到m的人被淘汰,然后从被淘汰人的下一个人开始重新报数,直到最后只剩下一个人。 求解方法:可以采用循环链表来模拟这个过程,每次找到报数到m的节点并删除它,直到链表中只剩下一个节点。 2. 设计C语言程序的数据结构和算...
约瑟夫环问题,是一个经典的循环链表问题,题意是:已知 n 个人(分别用编号 1,2,3,…,n 表示)围坐在一张圆桌周围,从编号为 k 的人开始顺时针报数,数到 m 的那个人出列;他的下一个人又从 1 开始,还是顺时针开始报数,数到 m 的那个人又出列;依次重复下去,直到圆桌上剩余一个人。
约瑟夫问题: 意思是===》 有n个人 ,手拉着手,围成一个圆圈,说 :“ 我们每m个数,在那个位置的人就必须自杀,接着往下数,自杀 。”一直循环下去。 比如有 10 人 ,规定 数到 2 就 去自杀。 1 2 3 4 5 6 7 8 9 第一次 ;往下数 2位 :123 4 5 6 7 8 9 ---2被刀了 第...
循环链表实现约瑟夫环 约瑟夫环问题,是一个经典的循环链表问题,题意是:已知 n 个人(分别用编号 1,2,3,…,n 表示)围坐在一张圆桌周围,从编号为 k 的人开始顺时针报数,数到 m 的那个人出列;他的下一个人又从 1 开始,还是顺时针开始报数,数到 m 的那个人又出列;依次重复下去,直到圆桌上剩余一个人。
对任意n个人,密码为m,实现约瑟夫环问题。2.数据结构设计首先,设计实现约瑟夫环问题的存储结构。由于约瑟夫环问题本身具有循环性质,考虑采用循环链表,为了统一对表中任意结点的操作,循环链表不带头结点。将循环链表的结点定义为如下结构类型:struct Node int data; Node 2、*next;其次,建立一个不带头结点的循环链表并...