059.约瑟夫环

举报
C语言与CPP编程 发表于 2022/04/30 22:14:46 2022/04/30
【摘要】 #include <stdio.h>#include <malloc.h>#define N 7 //定义N=7,表示有7个链表单元#define OVERFLOW 0#define OK 1typedef struct L...

  
  1. #include <stdio.h>
  2. #include <malloc.h>
  3. #define N 7 //定义N=7,表示有7个链表单元
  4. #define OVERFLOW 0
  5. #define OK 1
  6. typedef struct LNode{ //定义链表结构
  7. int password;
  8. int order;
  9. struct LNode *next;
  10. }LNode,*LinkList;
  11. int PassW[N]={3,1,7,2,4,8,4};
  12. void Joseph(LinkList p,int m,int x); //声明函数
  13. int main()
  14. {
  15. int i,m;
  16. LinkList Lhead,p,q; //定义三个指向链表结构的指针
  17. Lhead=(LinkList)malloc(sizeof(LNode)); //初始化头节点
  18. if(!Lhead)return OVERFLOW; //分配空间失败返回
  19. Lhead->password=PassW[0];
  20. Lhead->order=1;
  21. Lhead->next=NULL;
  22. p=Lhead;
  23. for(i=1;i<7;i++){
  24. if(!(q=(LinkList)malloc(sizeof(LNode))))return OVERFLOW;
  25. q->password=PassW[i]; //初始化循环列表中的密码值
  26. q->order=i+1;
  27. p->next=q;p=q; //新创建一个指针节点并使p->next指向它,再使p=q
  28. }
  29. p->next=Lhead; //使p->next指向头节点,从而形成循环链表
  30. printf("请输入第一次计数值m: \n");
  31. scanf("%d",&m); //用户输入第一次计数值m
  32. printf("第一次计数值m= %d \n",m);
  33. Joseph(p,m,N);
  34. return OK;
  35. }
  36. void Joseph(LinkList p,int m,int x){
  37. LinkList q;
  38. int i;
  39. if(x==0)return; //链表中没有节点的话,立即返回上一层函数
  40. q=p;
  41. m%=x; //m对x求余,从而求出链表中的第几个单元是所求节点
  42. if(m==0)m=x; //若m刚好可以整除x,则令m=x,因为如果m=0,则不进行下一个
  43. //for循环,那样就无法使q指向要删除节点,p指向他的的前一节点,那样则无法进行删除操作
  44. for(i=1;i<=m;i++){
  45. p=q;
  46. q=p->next; //使q指向要删除的节点,p指向q的前一个节点
  47. }
  48. p->next=q->next; //从循环链表中删除q指向的节点
  49. i=q->password;
  50. printf("%d ",q->order);
  51. free(q); //释放q指向的空间
  52. Joseph(p,i,x-1);
  53. }

文章来源: blog.csdn.net,作者:程序员编程指南,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/weixin_41055260/article/details/124495225

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。