#include <iostream>
using namespace std;
#dene S 1 //开始报数的小孩编号
#dene N 5 //报到N的小孩出列
#dene NUM 10 //小孩的个数
struct node //定义链表结点
{
int data; //表示小孩的编号
node *next;
};
//记录小孩围坐信息
node *create ( int num )
{// “ ”将 小孩围坐一圈 建成一个有num个结点的单项循环链表
//这num ……个结点的数据域依次为,, ,num
node *r,*h,*p;
h = new node; //h为链表的头指针
h->data = 1; //设置头结点编号为
r = h; //r为链表的尾指针
for ( int i=2;i<=num;i++ )
{//建立长度为num的链表
p = new node;
p->data = i;
r->next = p;
r = p;
}
r->next = h; //将链表的头和尾连起来,形成循环链表
return h;
}
//报数出列
node *count ( int s,int n,int num,node *h )
{//h为链表的头指针。从第s个开始报数,报到n的小孩出列。
node *p,*q,*hu,*ru;
hu = new node;
hu->data = num; //首指针存储小孩的个数
ru = hu; //建立一个空链来存储出列顺序,ru、hu分别为首尾指针
q = h;
if ( s==1 )
{
for ( int i=1;i<n;i++ )
q = q->next;
p = q->next;
ru->next = p; //利用原链表的空间建个新链表
ru = p;
p = p->next; //p后移
q->next = p; //在原链表中删除p
for ( int j=1;j<num;j++ )
{//从第s个小孩报数,直到所有小孩出列
for ( int i=1;i<n;i++ ) //开始报数,p向后移动n-1个结点,即为报N的小孩
{
p = p->next;
评论0