|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
/*
约瑟夫环问题
*/
#include<stdio.h>
#include<stdlib.h>
typedef struct LinkNode
{
int data;
struct LinkNode *next;
}LinkNode,*LinkList;
//创立一个不带头节点的循环链表
void build(LinkList &L)
{
L=(LinkNode *)malloc(sizeof(LinkNode));
LinkList q=L;
int e;
scanf("%d",&e);
L->data=e;
scanf("%d",&e);
while(e!=-1)
{
LinkNode *s=(LinkNode *)malloc(sizeof(LinkNode));
s->data=e;
q->next=s;
q=s;
scanf("%d",&e);
}
q->next=L;
}
void yuesefu(LinkList &L,int m)
{
int n=1;
LinkList p=L;
//遍历
while(L->next!=L)
{
p=p->next;
n++;
if(n==m)
{
LinkList r=L;
while(r->next!=p)
{
r=r->next;
}
r->next=p->next;
printf("%d ",p->data);
free(p);
p=r;
L=r->next;//让新开始报数的结点当头
n=0;//重新从0开始计数
}
}
}
int main()
{
LinkList L;
build(L);
yuesefu(L,5);
}
|
|