• 圆圈中最后剩下的数字约瑟夫环问题


    用环形链表实现约瑟夫环问题

     1 typedef struct node
     2 {
     3     int data;
     4     struct node * next;
     5 }Node, *Link;
     6 
     7 Link create(int n) //生成环形链表
     8 {
     9     Link head, rear ;
    10     Link p = new Node; //第n个节点
    11     p->data = n;
    12     head = rear = p;
    13     for( int i=n-1; i>0; i-- ) //从前面插入n-1个节点,注意,单项链表是便于逆向顺序构成的。 
    14     {
    15         p = new Node;
    16         p->data = i;
    17         p->next = head;
    18         head = p; //每插入一个节点,头指针前移一个
    19     }
    20     rear->next = head ; //n节点指向头节点,构成环形链表
    21     return h;
    22 }
    23 
    24 int joseph( int m, Link h ) //找出最后一个
    25 {
    26     Link p = h;
    27     int i=0;
    28     while( p->next != p ) //只有一个节点时结束循环
    29     {
    30         i++;
    31         if( i == m-1) //数了m-1个节点
    32         {
    33             Link q = p->next ; //删除下一个,即第m个
    34             p->next = q->next ;
    35             delete q;  //因为结点都是new出来的内存堆区域里的空间,所以必须delete才能收回
    36             i = 0;  //删除一个节点,计数器置为0
    37         }
    38         p =p->next ;
    39     }
    40     int last= p->data ;
    41     delete p;   //删除最后一个节点,避免内存泄露
    42     return last;
    43 }
  • 相关阅读:
    【C#语言规范版本5.0学习】1.5类和对象(一)
    【C#语言规范版本5.0学习】1.5类和对象(二、类的方法)
    【C#语言规范版本5.0学习】1.4语句
    mac 安装docker
    Laravel 操作指令
    php 查看接口运行时间
    MySql 按日期条件查询数据
    Laravel操作上传文件的方法
    统计数据表中某个字段的值大于2条的数据
    循环中合并数组
  • 原文地址:https://www.cnblogs.com/kevinGaoblog/p/2435654.html
Copyright © 2020-2023  润新知