[分享]数据结构中的,有懂得近来看看约瑟夫问题
约瑟夫问题#include<stdlib.h>
#include"stdio.h"
#define NULL 0
typedef struct point
{ int data;
int No;
struct point *next;
}LNODE,*LinkList;
int n,m;
LinkList create()
{int i;
LinkList head,tail,ne;
head=NULL;
printf("\n input n:");
scanf("%d",&n);
printf("\n input m:");
scanf("%d",&m);
for(i=1;i<=n;i++)
{
ne=(LinkList)malloc(sizeof(LNODE));
ne->No=i;
if(head==NULL)
{head=ne;tail=head;}
else{tail->next=head;tail=ne;}
}
tail->next=head;
return head;
}
void search(LinkList head)
{int count,num;
LinkList pre,p;
num=0;count=1;
p=head;
printf("\n output data:");
while(num<n)
{do
{ count++;pre=p;p=p->next;}while(count<m);
pre->next=p->next;
printf("%3d",p->No);
free(p);
p=pre->next;
count=1;
num++;
}
}
main()
{
LinkList head;
head=create();
search (head);
getchar();
getchar();
}
为什么之可以运行一次就结束了
比如N=8 M=4他就运行一次
而且第一次返回的是1