意空表和非空表的界限。Р如 n=8, m=4 时,若从第一个人, 设每个人的编号依次为 1,2,3,…开始报数,则得到的出列次序为4,8,5,2,1,3,7,6,Р如下图所示,内层数字表示人的编号,每个编号外层的数字代表人出列的序号。Р[程序实现]Р#include <stdio.h>Р#include <malloc.h>Рtypedef struct nodeР { int num;Р struct node *next;Р }linklist;Рlinklist *creat(head,n) /*使n个人围成一圈,并给每个人标识号数*/Р linklist *head;Р int n ;Р {linklist *s,*p;Р int i;Р s=(linklist * )malloc(sizeof(linklist));Р head=s;Р s->num=1;Р p=s;Р for(i=2;i<=n; i++)Р { s=(linklist *) malloc(sizeof(linklist));Р s->num=i;Р p->next=s;Р p=s;Р }Р p->next=head;Р return(head);Р }/* creat */Рlinklist * select(linklist *head, int m)Р{ linklist *p, *q;Р int i, t;Р p=head; t=1;Р q=p; /* q为p的前趋指针*/Р p=p->next;Р doР {Р t=t+1 ; /*报一次数*/Р if(t%m==0)Р { printf("%4d", p->num);Р q->next=p->next;Р free(p);Р p=q->next;Р }Р else { q=p;Р p=p->next;Р }Р }while(q!=p);