qq_19701837 2019-06-27 12:35 采纳率: 70%
浏览 382
已结题

约瑟夫死亡游戏,找到的代码有几处不懂。

pNode cur = NULL;           //当前节点
pNode pre = NULL;           //当前结点的前一个节点
pNode head = NULL;          //头节点

/****以下为单循环链表创建一个n个数的约瑟夫环*****/ 

pNode CreateNode( DataType n)
{
    int i = 0;
    for (i = 1; i <= n;i++)
    {
                    pNode tmp = (pNode)malloc(sizeof(Node));
        if (NULL == tmp)
        {
            printf("内存不够了 !\n");          //提升健壮性,针对内存不足的情况所做的应对 
            exit(EXIT_FAILURE);
        }
        else
        {
            cur = tmp;
            cur->data = i;
            cur->next = NULL;
        }
        if (head == NULL)
        {
            head = cur;
        }
        else
        {
            pre->next = cur;
        }
        pre = cur;  
    }
    cur ->next = head;                  //链表的尾节点指向头节点形成环,体现循环链表的特点-循环 
    return head;
}
void JosephCircle(DataType num, DataType count)
{
    int i = 0;
    int j = 0;
    cur =CreateNode(num);
    while (cur->next != cur)        //判断链表中是否达到游戏停止的条件只剩下一只猴子 
    {
        for (i = 1; i <num ;i++)
        {
            for (j = 1;j < count ; j++)
            {
                pre = cur;
                cur = cur->next;                //从头继续开始 
            }

            printf("第%d个出局的猴子是第(%d )位\n", i, cur->data);
            pre->next = cur->next;
            free(cur);
            cur = pre->next;
        }
    }
    printf("最终留下来的猴子是第( %d )位\n", cur->data);
}
int main()
{
    int num;                                                            //约瑟夫环总人数
    int count;                                                          //出局的猴子所代表的数
    printf("请输入参加这场约瑟夫环问题的猴子数: ");
    scanf("%d", &num);
    printf("请输入是第几个报数的猴子为出局数: ");
    scanf("%d", &count);
    JosephCircle( num,  count);
    return 0;
}

“pNode tmp = (pNode)malloc(sizeof(Node));”是怎么操作的,含义分析
“if (NULL == tmp)”中 tmp 代表什么含义

“pNode CreateNode( DataType n)”
这个函数最好能详细解释一下。
谢谢!!

  • 写回答

1条回答 默认 最新

  • dabocaiqq 2019-06-27 16:24
    关注
    评论

报告相同问题?

悬赏问题

  • ¥15 HFSS 中的 H 场图与 MATLAB 中绘制的 B1 场 部分对应不上
  • ¥15 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?