/*约瑟夫问题:利用循环链表,动态地址的申请,数据的删除*/
#include <stdio.h>
#include <stdlib.h>
typedef struct node{
int data;
struct node *next;
}Node;
Node *creat(int n)
{
Node *p=NULL,*head;
head=(Node *)malloc(sizeof(node));
p=head;
Node *s;
int i=1;
if(0!=n)
{
while(i<=n)
{
s=(Node *)malloc(sizeof(node));
s->data=i++;
p->next=s;
p=s;
}
s->next=head->next;//等价p->next=head->next;
}
free(head);
return s->next;
}
int main()
{
int m,n;
printf("请输入总人数以及周期数:\n");
scanf("%d %d",&n,&m);
Node *temp,*head=creat(n);
m%=n;
while(head!=head->next)
{
for(int i=1;i<m-1;i++)
head=head->next;
temp=(Node *)malloc(sizeof(node));
printf("%d->",head->next->data);
temp=head->next;
head->next=temp->next;
free(temp);
head=head->next;
}
printf("%d\n",head->data);
system("pause");
return 0;
}
约瑟夫问题
最新推荐文章于 2025-06-14 11:29:48 发布