@图灵不吃苹果
猴子选王链表实现
#include <stdio.h>
#include <stdlib.h>
typedef struct link{
int number;
struct link*next;
}LinkList;
LinkList *head,*tail;
void creatlink(int m){
LinkList *p,*q;
p=(LinkList*)malloc(sizeof(LinkList));
p->number=1;
p->next=NULL;
head=p;
q=p;
printf("%2d",p->number);
for(int i=2;i<=m;i++){
p=(LinkList*)malloc(sizeof(LinkList));
p->number=i;
printf("%2d",p->number);
q->next=p;
q=p;
p->next=NULL;
}
tail=q;
tail->next=head;
printf("\n");
}
void select(int a,int b)
{
LinkList *p,*q;
int i=1;
q=tail;
p=q;
p=p->next;
while(p->number!=a){
q=p;
p=p->next;
}
while(tail!=head){
if(i==b){
if(head->number==p->number)
{
head=head->next;
}
if(tail->number==p->number)
{
tail=q;
}
q->next=p->next;
printf("出局的猴子是: %2d \n",p->number);
free(p);
p=q->next;
i=1;
}
else{
i++;
q=p;
p=p->next;
}
}
printf("最后留下来的是:%2d\n",head->number);
}
int main()
{
int j,k,tmp;
printf("请输入整数a(代表猴子);b代表从第几个数起开始出局 ; c代表第几个数就出局的猴子\n");
scanf("%d %d %d",&j,&k,&tmp);
creatlink(j);
select(k,tmp);
return 0;
}
@2019/10/15