为了账号安全,请及时绑定邮箱和手机立即绑定

作业社区

探索学习新天地,共享知识资源!

0 提交作业
0 布置作业
0 满分作业
得分 0
讨论题

慕尼黑3595755 的学生作业:

#ifndef JOSEPHUS_H #define JOSEPHUS_H typedef struct Node { int value; struct Node* next; } Node; Node* createCircularLinkedList(int n); void removeKthNode(Node** head, int k); void josephusProblem(int n, int k, int m); #endif // JOSEPHUS_H//josephus.c #include #include #include “josephus.h” // 创建新节点 Node* createNode(int value) { Node* newNode = (Node*)malloc(sizeof(Node)); newNode->value = value; newNode->next = NULL; return newNode; } // 构建单向循环链表 Node* createCircularLinkedList(int n) { Node* head = createNode(1); Node* current = head; for (int i = 2; i next = createNode(i); current = current->next; } current->next = head; // 形成循环链表 return head; } // 打印并删除第k个节点 void removeKthNode(Node** head, int k) { Node* current = head; Node previous = NULL; for (int i = 0; i < k - 1; i++) { previous = current; current = current->next; } if (previous != NULL) { previous->next = current->next; } else { *head = current->next; // 如果删除的是头节点,更新头节点 } free(current); } // 解决约瑟夫问题 void josephusProblem(int n, int k, int m) { Node* head = createCircularLinkedList(n); Node* current = head; // 找到起始位置k-1的节点 for (int i = 0; i < k - 1; i++) { current = current->next; } printf(“出列序列: “); while (n > 0) { for (int i = 0; i < m - 1; i++) { current = current->next; } printf(”%d “, current->value); removeKthNode(&head, current->value); current = current->next; n–; } printf(”\n”); }//main.c #include “josephus.h” int main() { int n = 8, k = 3, m = 4; josephusProblem(n, k, m); return 0; }

微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号