• 约瑟夫问题循环链表


     1 #include <stdio.h>
     2 #include <stdlib.h>
     3 
     4 #define N 8
     5 #define STEP 3
     6 
     7 typedef int datatype;
     8 
     9 typedef struct _node_
    10 {
    11     datatype data;
    12     struct _node_ *next;
    13 }linknode, *linklist;
    14 #if 0
    15 linklist p, q;
    16 linklist h = (linklist)malloc(sizeof(linknode));
    17 h->next = NULL;
    18 
    19 p = h;
    20 for(i=0; i<10; i++)
    21 {
    22     q = (linklist)malloc(sizeof(linknode));
    23     q->data = i;
    24     q->next = NULL;
    25     p->next = q;
    26     p = p->next;
    27 
    28 }
    29 #endif
    30 int main(int argc, char *argv[])
    31 {
    32     int i;
    33     linklist p, q;
    34 
    35     p = (linklist)malloc(sizeof(linknode));
    36     p->data = 1;
    37     q = p;
    38 
    39     for(i=2; i<=N; i++)
    40     {
    41         q->next = (linklist)malloc(sizeof(linknode));
    42         q = q->next;
    43         q->data = i;    
    44     }
    45     q->next = p;
    46 #if 0
    47     q = p;
    48     for(i=0; i<=N; i++)
    49     {
    50         printf("%d ", q->data);
    51         q = q->next;    
    52     }
    53 #endif
    54 
    55     while(p->next != p)
    56     {
    57         for(i=0; i<STEP-2; i++)
    58             p = p->next;
    59 
    60         q = p->next;
    61         p->next = q->next;
    62         printf("%d ", q->data);
    63         free(q);
    64         p = p->next;
    65     }
    66     printf("%d \n", p->data);
    67     return 0;
    68 }

    已知N个人围着一圈站(编号1、2、3、、、、、n),以编号为K 的人开始报数,数到m的那个人出列;他的下一个人又从k开始报数,数到m的那个出列;依次规律重复下去,直到全部出列。

    思路:

    一、建立一个具有n个节点的,无头节点的循环链表。

    二、确定第一个报数人的位置。

    三、不断地从链表中删除节点,直到链表位为空。

  • 相关阅读:
    Numpy数据处理函数
    数据库-创建表
    描述统计学:表格法和图形法
    最短路 || POJ 1511 Invitation Cards
    搜索 || DFS || UOJ 146 信息传递
    最短路 || UOJ 19 寻找道路
    最短路 || POJ 1847 Tram
    博弈论
    筛选法 || POJ 3292 Semi-prime H-numbers
    团队第一次作业
  • 原文地址:https://www.cnblogs.com/zhou2011/p/2666206.html
Copyright © 2020-2023  润新知