约瑟夫环数据结构代码
时间: 2023-11-12 07:54:51 浏览: 35
约瑟夫环问题是一个经典的数学问题,可以用来模拟一群人报数并按照一定规则淘汰的过程。下面是一个示例的约瑟夫环数据结构代码的实现:
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct Node {
int data;
struct Node* next;
} Looplink;
void createJosephusCircle(Looplink** S, int n) {
Looplink* head = (Looplink*)malloc(sizeof(Looplink));
if (head == NULL) {
printf("内存分配失败\n");
exit(1);
}
head->data = 1;
head->next = NULL;
Looplink* tail = head;
for (int i = 2; i <= n; i++) {
Looplink* newNode = (Looplink*)malloc(sizeof(Looplink));
if (newNode == NULL) {
printf("内存分配失败\n");
exit(1);
}
newNode->data = i;
newNode->next = NULL;
tail->next = newNode;
tail = newNode;
}
tail->next = head;
*S = head;
}
void josephusExecution(Looplink** S, int m) {
Looplink* p = *S;
printf("约瑟夫环实现后:");
while (p->next != p) {
for (int i = 0; i < m - 1; i++) {
p = p->next;
}
Looplink* q = p->next;
printf("%d\t", q->data);
p->next = q->next;
free(q);
}
*S = p;
printf("%d\n", p->data);
free(p);
}
int main() {
int n, m;
printf("请输入总人数n:");
scanf("%d", &n);
printf("请输入报数上限m:");
scanf("%d", &m);
Looplink* S;
createJosephusCircle(&S, n);
josephusExecution(&S, m);
return 0;
}
```