#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语言——约瑟夫环循环链表
链表实现循环移除元素
最新推荐文章于 2022-07-29 22:26:45 发布
该博客介绍了一个C语言程序,用于实现从链表中按照特定条件循环移除元素的功能。程序首先创建一个包含姓名和标记的链表,然后根据输入的两个整数w和s,从链表中每s个人开始移除第w个人,直至只剩一个人。程序通过双向链表实现了链表结构,最后释放了所有分配的内存。
3530

被折叠的 条评论
为什么被折叠?



