zoukankan      html  css  js  c++  java
  • 约瑟夫环 单向循环链表实现

    约瑟夫环 已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围。从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列。

    ///循环链表实现
    #include<bits/stdc++.h>
    using namespace std;
    typedef struct List
    {
        int data;
        struct List *next;
    } node;
    int main()
    {
        node *head,*r,*s;
        head = new node;///带来头结点,不过后面会去掉
        r =head;
        int n,i;
        int k;
           cin>>n>>k;
           ///建立循环链表
            for(i = 1; i<=n; i++)
            {
                s = new node;
                s->data = i;
                r->next = s;
                r= s;
            }
            r->next =head->next;///为节点指向头结点的下一个有数据的结点
            node *p,*p1;
            p = head->next;///去掉头结点
            delete head;
            while(p->next != p)///当链表中只有一个结点时停止
            {
                for(i = 1; i<k-1; i++)///遍历到第k个时停止
                {
                    p = p->next;
                }
                p1=p->next;///删除该结点
                p->next = p->next->next;
                delete p1;
                p = p->next;
            }
            cout<<p->data<<endl;
            delete p;
         return 0;
    }
  • 相关阅读:
    Codeforces Round #249 (Div. 2) D. Special Grid 枚举
    图论二
    C语言中的atan和atan2(转)
    BestCoder Round #79 (div.2)
    数学
    LCA
    二分图
    动态规划
    线段树
    树状数组
  • 原文地址:https://www.cnblogs.com/tp25959/p/10254101.html
Copyright © 2011-2022 走看看