约瑟夫环

xiaoxiao2025-12-04  3

约瑟夫环代码

#include <stdio.h> #include<stdlib.h> typedef struct node { int Number; struct node* Next; }node; node *create(int n) { //创建头指针指向第一个节点,申请第一个节点的空间 node* head = (node*)malloc(sizeof(node)); //头指针备份 node* headlock = head; //赋值一个完整节点+申请下一个节点的存储空间,一直到n-1个,跳出循环后第n个节点已经创建还没赋值 for (int i =1; i<n; i++) { head->Number = i; node* now = (node*)malloc(sizeof(node)); head->Next = now; head = head->Next; } //此时head指向n个节点,赋值,OK了 head->Next = headlock; head->Number = n; head = head->Next; return head; } void func(int n, int k) //n 总数,K->第几个人要出局 { node* headlock; node* phead; node* head = create(n); while(head != head->Next) { for (int i = 1; i < k-1; i++) //从第1个跳K-2下指向第K-1个 { head = head->Next; } phead = head; //phead指向第K-1个 head = head->Next; //指向第K个 printf("->%d", head->Number); //第K个出局 headlock = head; phead->Next = head->Next; //第K-1个指向第K+1个 head = head->Next; free(headlock); //释放第K个内存 } printf("->%d", head->Number); //最后一个人 } int main() { func(41,3); return 0; }
转载请注明原文地址: https://www.6miu.com/read-5040346.html

最新回复(0)