?? cyclist.c
字號:
typedef struct LNode{
int data;
struct LNode *next;
}*linklist,LNode;
int sum;
linklist first;
linklist linklist_create(linklist head)
{
int i;
linklist p,q,k;
head=(linklist)malloc(sizeof(LNode));
p=head;
for(i=2;i<=sum;i++)
{
q=(linklist)malloc(sizeof(LNode));
q->data=i;
p->next=q;
p=p->next;
}
p->next=head;
return(head);
}
linklist delete_out(linklist head,int m,int k)
{
int i,j;
linklist p,q;
p=head;
for(i=1;i<m;i++)
{
p=p->next;
}/*找到起始位置*/
for(j=0;j<sum;j++)
{
for(i=1;i<k-1;i++)
{
p=p->next;
}
q=p->next;
printf("%5d",q->data);
p->next=p->next->next;
p=p->next;
free(q);
}/*delete函數的主作用-輸出先后離桌的人的次序(或編號)*/
}
out(linklist head)
{
linklist p;
int i;
p=head;
for(i=0;i<sum;i++)
{
printf("%5d",p->data);
p=p->next;
}
}
void main()
{
int m,k;
linklist head;
clrscr();
printf("請輸入桌子的人數n=");
scanf("%d",&sum);
printf("\n請輸入起始的位置m(m>0且m<=n)");
scanf("%d",&m);
printf("\n請輸入輪流的人數大小k=");
scanf("%d",&k);
head=linklist_create(first);
out(head);
printf("\n這是離桌人的次序\n");
delete_out(head,m,k);
}