#include<stdio.h>
#include<stdlib.h>
typedef struct node
{
int number;
struct node *next;
}person;
person *initLink(int n)
{
person *head=(person*)malloc(sizeof(person));
head->number=1;
head->next=NULL;
person * cyclic=head;
for (int i=2; i<=n; i++) {
person * body=(person*)malloc(sizeof(person));
body->number=i;
body->next=NULL;
cyclic->next=body;
cyclic=cyclic->next;
}
cyclic->next=head;//
return head;
}
void findAndKillK(person * head,int k,int m){
person * tail=head;
while (tail->next!=head) {
tail=tail->next;
}
person * p=head;
while (p->number!=k) {
tail=p;
p=p->next;
}
while (p->next!=p) {
for (int i=1; i<m; i++) {
tail=p;
p=p->next;
}
tail->next=p->next;
printf("出列人的编号为:%d\n",p->number);
free(p);
p=tail->next;
}
printf("出列人的编号为:%d\n",p->number);
free(p);
}
int main() {
printf("输入圆桌上的人数n:");
int n;
scanf("%d",&n);
person * head=initLink(n);
printf("从第k人开始报数(k>1且k<%d):",n);
int k;
scanf("%d",&k);
printf("数到m的人出列:");
int m;
scanf("%d",&m);
findAndKillK(head, k, m);
return 0;
}
12月28日 单向循环链表(约瑟夫环)
最新推荐文章于 2025-05-21 11:46:17 发布
本文介绍了一个基于C语言实现的约瑟夫环问题解决方案。通过定义结构体和使用指针操作来创建并操作循环链表,实现了指定人数围成一圈进行报数,并按特定规则淘汰成员直至最后一名成员的过程。读者将了解如何初始化链表、遍历链表及释放内存等基本操作。
19万+

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



