C/C++,数据结构单链表实现约瑟夫环

来源:互联网 发布:无法备案的域名 编辑:程序博客网 时间:2024/05/21 14:01

约瑟夫环——围成一圈,定义一个数值K,从任意位置开始计数,每走K步删除当前位置结点,直到剩下最后一个结点,求最后一个结点


//单链表结构以及Find函数参见 2016-1-2 13:56 发表博客

SListNode* Joseph(SListNode *&pos, int K) //约瑟夫环{ assert(pos); if (K > 0) {  SListNode *tmp = pos;  while (1)  {   int count = K;   while (--count)   {    tmp = tmp->next;   }   if (tmp->next == tmp)    return tmp;   SListNode *cur = tmp->next;//删除tmp位置的结点,思路:pos与下一位置结点元素值进行交换后,删除下一结点   DataType Tmpcount = cur->data;   tmp->next = cur->next;   cur->data = tmp->data;   tmp->data = Tmpcount;   free(cur);  } } return NULL;}void Test7()// Joseph{ printf("//Test7() Joseph \n"); SListNode *LL = NULL; PushBack(LL, 1); PushBack(LL, 2); PushBack(LL, 3); PushBack(LL, 4); PushBack(LL, 5); PushBack(LL, 6); PushBack(LL, 7); Find(LL, 7)->next = Find(LL, 1); printf("%d\n", Joseph(LL, 3)->data);}


wKiom1aKmSnw3ZgMAAAc7oG2MHo188.png

0 0
原创粉丝点击