#include
#include
struct slist
{
int data;
struct slist *next;
};
typedef struct slist SLIST;
SLIST *creat(int n)//建立链表
{
int i;
SLIST *h,*s,*r;
h=(SLIST*)malloc(sizeof(SLIST));
r=h;
for(i=1;i<=n;i++)
{
s=(SLIST*)malloc(sizeof(SLIST));
s->data=i;
r->next=s;
r=s;
}
r->next=h->next;
return h;
}
void print(SLIST *head,int n)//输出函数
{
int l=0;
SLIST *p;
p=head->next;
if(p=='\0')
printf("这是个空链表\n");
else
{
printf("猴子们的顺序:\n");
printf("head");
do
{
l++;
printf("-->%d",p->data);
p=p->next;
}
while(l
printf("-->head\ n");
}
}
main()//主函数
{
int a,b,n,i,j;
int m[100];
SLIST *head,*q,*t,*T,*M,*G,*H;
printf("输入猴子的个数\n");
scanf("%d",&n);
head=creat(n);
print(head,n);
printf("输入第一只猴子的序号\ n");
scanf("%d",&a);
printf("输入猴子的间隔数,即步长\n");
scanf("%d",&b);
if(b==1)
{
q=head->next;
for(j=0;j
q=q->next;
printf("依次被选出猴子的序号如下:\n");
for(i=0;i
{
printf("%4d",q->data);
q=q->next;
}
printf("\n");
printf("猴子大王是%d\n",a-1);
}
else
{
q=head->next;
for(j=0;j
q=q->next;
G=(SLIST*)malloc(sizeof(SLIST));
G->data=100;
H=G;
for(i=0;i
{
t=q;
for(j=0;j
t=t->next;
for(j=0;j
q=q->next;
T=(SLIST*)malloc(sizeof(SLIST));
T->data=t->data;
M=T;
M->next=H;
H=M;
q->next=q->next->next;
q=t->next;
free(t);
}
T=(SLIST*)malloc(sizeof(SLIST));
T->data=q->data;
M=T;
M->next=H;
H=M;
T=(SLIST*)malloc(sizeof(SLIST));
T->data=q->data;
M=T;
M->next=H;
H=M;
printf("依次被选出猴子的序号如下:\n");
print(M,n);
printf("\n");
printf("猴子大王是%d\n",q->data);
}
}
运行结果如下: