#include<stdio.h>
#include <stdlib.h>
#define MAXN 100
typedef struct _data
{
int flag; //标记
char name[30]; //姓名
int index; //序号
struct _data *next;
}Stdata;
void CountOff(int n,int w,int s,Stdata* out);
int main()
{
int i,n,w,s;
Stdata* head=0,*p,*t;
scanf("%d",&n); //读取N
getchar();//吸收回车符
for(i=0;i<n;i++)
{
p = (Stdata*)malloc(sizeof(Stdata));
//读取N个名字,并存如链表
scanf("%s",p->name);
p->flag = 0;
p->index = i+1;
p->next = 0;
if(head==0)
{
head = p;
t=head;
}else
{
t->next = p;
t = p;
}
}
t->next = head; //最后一个节点指向头节点
scanf("%d %d",&w,&s); //读入w和s
CountOff(n,w,s,head);
//释放空间
while(head)
{
p = head->next;
free(head);
head = p;
}
head = 0;
return 0;
}
void CountOff(int n,int w,int s,Stdata* head)
{
int i=1,t=n,k=0;//t表示剩余人数
Stdata* out=head;
//找到第w个位置
while(i<w)
{
out = out->next;
i++;
}
//开始出队
while(t!=1)
{
if(out->flag==0)
{
k++;
if(k%s==0)
{
k = 0;
out->flag=1;
printf("%d %s\n",out->index,out->name);
t--;
}
}
out = out->next;
}
}
c语言——约瑟夫环循环链表
最新推荐文章于 2025-01-18 23:13:11 发布