ZBLOG

任务描述 本关任务:编写一个能解决约瑟夫环的程序。 相关知识 参考PPT。 创建无头结点的单循环链表 使用尾插法,将1,2,...,n,依次插入到链表 出圈 数到m,出圈。 两种做法:1 删除,将指针移到待删除的结点前面,删除 2: 直接调用链表的删除函数删除。删除后改变链表头的指针位置。 编程要求 编程完成jose.cpp中的2个函数: 创建环 void createCycle( LinkList &L, int n); n: 结束的数字 创建从1开始,到n结束的单循环链表(...

下面是一个解决约瑟夫环问题的示例代码:

  1. #include "linklist.h"
  2. #define FEW_PEOPLE -1
  3. #define WRONG_JUMP -2
  4. void createCycle(LinkList &L, int n) {
  5. L = new LNode;
  6. L->next = L; // 循环链表初始时指向自己
  7. for (int i = 1; i <= n; i++) {
  8. LinkList newNode = new LNode;
  9. newNode->data = i;
  10. // 将新节点插入到循环链表尾部
  11. newNode->next = L->next;
  12. L->next = newNode;
  13. L = newNode;
  14. }
  15. }
  16. int jose(LinkList L, int n, int m) {
  17. if (n < 2) {
  18. return FEW_PEOPLE;
  19. }
  20. if (m < 2) {
  21. return WRONG_JUMP;
  22. }
  23. LinkList p = L;
  24. while (p->next != p) { // 当只剩一个人时结束循环
  25. for (int i = 1; i < m-1; i++) {
  26. p = p->next; // 数数,每次移动m-1步
  27. }
  28. LinkList delNode = p->next; // 要删除的节点
  29. p->next = delNode->next; // 删除节点
  30. delete delNode;
  31. p = p->next; // 移动到下一个节点继续数数
  32. }
  33. return p->data;
  34. }

你可以将上述代码放在jose.cpp文件中,然后编译运行测试主函数即可。记得引入相应的头文件和定义错误码。希望对你有所帮助!


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=9456

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?