约瑟夫环

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct looplink
{
	int data;
	struct looplink *next;
}clink;
clink *create_link(int data)
{
	clink *p=malloc(sizeof(clink));
	memset(p,0,sizeof(clink));
	p->data=data;
	return p;
}
void insert_data(clink *head,int nu)
{
	clink *new=NULL;
	clink *p=head;
	if(p->next == NULL)
	{
		p->data=nu;
		p->next=p;
		return ;
	}
	new=create_link(nu);
	while(p->next!= head)
		p=p->next;
	new->next=p->next;
	p->next=new;
	return ;
}

clink *del_data(clink *head,int n)
{
	int i,j=0;
	clink *p=head;
	clink *tmp;
	while(p->next!=p)
	{
		i=1;
		while(i<n-1)
		{
			p=p->next;
			i++;
		}
		tmp=p->next;
		printf("%d\t",tmp->data);
		p->next=p->next->next;
		free(tmp);
		p=p->next;
		if(++j%10==0)
			putchar(10);
	}
	return p;
}
show_data(clink *head)
{
	clink *p =head;
	do
	{
		printf("%d\t",p->data);
		p=p->next;
	}while(p!=head);
	putchar(10);
}
int main()
{
	clink *head=create_link(0);
	int nu,count,num,i;
	puts("input the num and count");
	scanf("%d %d",&num,&count);
	puts("****************");
#if 0
	for(i=0;i<num;i++)
	{
		scanf("%d",&nu);
		insert_data(head,nu);
	}
#endif
	for(i=1;i<=num;i++)
		insert_data(head,i);
	head=del_data(head,count);
	putchar(10);
	puts("---------------");
	show_data(head);
	return 0;
}

你可能感兴趣的:(数据结构,约瑟夫环)