約瑟夫環 單向循環鏈表實現


約瑟夫環 已知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;
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM