#include <stdio.h>
#include <stdlib.h>
typedef struct Node{
int data;
struct Node *next;
}LNode,*LinkList;
//创建无头结点的循环链表
void create_L(LinkList &L,int n)
{
LinkList r = L;
for(int i = 1;i<=n;i++)
{
LinkList p = (LinkList)malloc(sizeof(LNode));
p->data = i;
if(L == NULL)
{
L = p;
r = p;
}else
{
r->next = p;
r = p;
}
}
r->next = L;
return;
}
//获取链表中第n个节点的指针
LinkList getLinkList(LinkList L,int n)
{
LinkList p = L;
int count = 0;
while(L!=NULL && count <n)
{
p = p->next;
count ++;
}
return p;
}
void josephus(LinkList L,int k,int m)
{
//找到第起始位置k
LinkList p = getLinkList(L,k-1);
LinkList q;
//不是最后一个出队则循环
while(p->next != p)
{
for(int i = 1;i<m;i++)
{
q = p;
p = p->next;
}
q->next = p->next;
printf("%d号出局\n",p->data);
free(p);
p = q->next;
}
printf("最后一个人出局,编号为%d\n",p->data);
free(p);
return;
}
int main()
{
LinkList L = NULL;
create_L(L,6);
josephus(L,3,4);
return 0;
}
C语言解决约瑟夫环问题
最新推荐文章于 2021-10-27 21:01:35 发布