约瑟夫环算法

文章分类: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); }

你可能感兴趣的:(约瑟夫环算法)