1.循环链表
对于普通的链表,我们都知道,有一个指针域与一个数据域,一直从头节点开始,往下顺延,
那么循环链表其实并不难,就只是在普通的单向有头节点的基础上,让末节点的指针域指向头节点head即可。
2.那我们现在来看一下约瑟夫环的问题:
约瑟夫环问题,是一个经典的循环链表问题,题意是:已知 n 个人(分别用编号 1,2,3,…,n 表示)围坐在一张圆桌周围,从编号为 k 的人开始顺时针报数,数到 m 的那个人出列;他的下一个人又从 1 开始,还是顺时针开始报数,数到 m 的那个人又出列;依次重复下去,直到圆桌上剩余一个人。
(这只是这种问题的一个形式,还有很多种,正在学习中ing)
先来分析一下这个问题:
1.首先,我们要明白要用循环链表,那就必须先创建一个循环链表(头节点存储了信息),如下
struct list * creat()
{
struct list *p1,*p2,*head;
head=p1=(struct list*)malloc(sizeof(struct list));
p2=(struct list*)malloc(sizeof(struct list));
printf("请输入你要输入的数:(以0结尾)");
scanf("%d",&head-