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;
    }
  • 相关阅读:
    清理计算机硬盘
    DIY-组装
    go函数类型的使用
    go同步互斥锁
    Go读写文件
    go mod
    go html
    channel
    arp和rarp协议
    自己实现的反射
  • 原文地址:https://www.cnblogs.com/tp25959/p/10254101.html
Copyright © 2011-2022 走看看