约瑟夫环算法

来源:互联网 发布:比特精灵mac版 编辑:程序博客网 时间:2024/06/07 04:10

文章分类:C++编程

C代码 复制代码
C/C++ code
<!--Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->#include <stdio.h>#include <malloc.h>#define LEN sizeof(struct node)struct node{ int data; struct node *next;}*p,*p1,*h,*r;main(){ void ysfh(int n,int k,int m); int n; int k; int m; printf("请输入人数n:/n"); scanf("%d",&n); printf("请输入编号为k的人开始报号的k的值:/n"); scanf("%d",&k); printf("请输入数到m的那人出列的m的值:/n"); scanf("%d",&m); ysfh(n,k,m);}void ysfh(int n,int k,int m){ //建立一个循环链表 for(int i=1;i<=n;i++) { p = (struct node *)malloc(LEN); p->data = i; if(h==NULL) { h = p; } else { p1->next = p; } p1 = p; } p->next = h; p = h; //把指针移动到编号为k的那个人上面 for(i=0;i<k;i++) { p1 = p; p = p->next; } //p1指向了编号为k的那个人 //找到数到m的那人并且删除 printf("删除的数字:/n"); while(p1->next!=NULL) //while循环条件肯定有问题,希望高手们看看应该如何写这个条件 { for(i=0;i<m;i++) { r = p1; p1 = p1->next; } //r指向的是删除那个数 p1->next = r->next; printf("%d ",r->data); free(r); } printf("最后出列的人是:%d/n",p1->data);}
原创粉丝点击