zoukankan      html  css  js  c++  java
  • 约瑟夫环(循环单链表)

      1 #include <cstdio>
      2 #include <cstdlib>
      3 #include <iostream>
      4 using namespace std;
      5 
      6 const int maxn = 1000;
      7 int Num_of_Player;
      8 int m_val;
      9 int cnt;
     10 //循环链表
     11 typedef struct LNode
     12 {
     13     int num, password;
     14     struct LNode *next;
     15 }*linklist, lnode;
     16 
     17 void InitLinkList(linklist *L)
     18 {
     19     (*L) = (linklist)malloc(sizeof(lnode));
     20     (*L)->num = -1;
     21     (*L)->password = -1;
     22     (*L)->next = *L;
     23 }
     24 
     25 void ClearLinkList(linklist *L)
     26 {
     27     lnode *pos, *node;
     28 
     29     pos = (*L)->next;
     30     while(pos != (*L))
     31     {
     32         node = pos;
     33         pos = pos->next;
     34         free(node);
     35     }
     36     (*L)->next = (*L);
     37 }
     38 
     39 void CreatLinkList(linklist L)
     40 {
     41     lnode *u, *v;
     42     //清空链表
     43     ClearLinkList(&L);
     44     //初始化尾指针
     45     v = L;
     46     int j = 1, psw;
     47 
     48     printf("please input the number of the players: ");
     49     scanf("%d", &Num_of_Player);
     50     printf("
    please input the passwords of the players: ");
     51     while(j <= Num_of_Player)
     52     {
     53         scanf("%d", &psw);
     54 /*----------------------插入新结点-------------------------------------*/
     55         u = (linklist)malloc(sizeof(lnode));     //分配一个节点head
     56         u->num = j;                              //为结点赋值
     57         u->password = psw;
     58         v->next = u;
     59         v = u;                                //更新尾结点
     60 /*---------------------------------------------------------------------*/
     61         j++;
     62     }
     63     v->next = L;
     64 }
     65 
     66 void DestoryLinkList(linklist L)
     67 {
     68     ClearLinkList(&L);//清空链表
     69     free(L);//销毁虚拟头结点
     70 }
     71 
     72 void solve(linklist L)
     73 {
     74     printf("please input the value of m: ");
     75     scanf("%d", &m_val);
     76 
     77     lnode *u, *v;
     78     v = L;
     79     int k = 0;
     80     while(v->next != v)
     81     {
     82         u = v;
     83         v = v->next;
     84 
     85         //注意:如果到了头部的虚拟结点,则再向后移一步
     86         if(v == L)
     87         {
     88             u = v;
     89             v = v->next;
     90         }
     91         k++;
     92 
     93         if(k == m_val)
     94         {
     95 //            cout << m_val << endl;
     96             //输出并释放掉第m个结点
     97             if(cnt) printf(" ");
     98             printf("%d", v->num);
     99             m_val = v->password;
    100 /*----------------销毁第m个数-----------------*/
    101             u->next = v->next;
    102             lnode *tmp = v;
    103             free(tmp);
    104             v = u;
    105 /*----------------销毁第m个数-----------------*/
    106             k = 0;
    107             cnt++;
    108         }
    109     }
    110 }
    111 
    112 
    113 int main()
    114 {
    115     linklist players;//开始“游戏”
    116     InitLinkList(&players);//初始化“游戏人员”
    117     CreatLinkList(players);//创建“游戏人员”
    118     solve(players);//进行“游戏”
    119     DestoryLinkList(players);//销毁“游戏人员”
    120     return 0;
    121 }
  • 相关阅读:
    vmware ubuntu 异常关机无法连接到网络
    Speed up GCC link
    常用的一些解压命令
    Log4j 漏洞复现
    Test Case Design method Boundary value analysis and Equivalence partitioning
    CCA (Citrix Certified Administrator) exam of “Implementing Citrix XenDesktop 4”
    What is Key Word driven Testing?
    SAP AGS面试小结
    腾讯2013终端实习生一面
    指针的引用
  • 原文地址:https://www.cnblogs.com/LLGemini/p/3956383.html
Copyright © 2011-2022 走看看