约瑟夫问题

/*约瑟夫问题:利用循环链表,动态地址的申请,数据的删除*/
#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;	
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值