约瑟夫c++ ZZ

《约瑟夫c++ ZZ》
template<class T>  cList;
《约瑟夫c++ ZZ》template<class T>
《约瑟夫c++ ZZ》class Node
《约瑟夫c++ ZZ》《约瑟夫c++ ZZ》《约瑟夫c++ ZZ》{
《约瑟夫c++ ZZ》    friend cList<T>;
《约瑟夫c++ ZZ》    public:
《约瑟夫c++ ZZ》《约瑟夫c++ ZZ》     Node( )《约瑟夫c++ ZZ》{};
《约瑟夫c++ ZZ》《约瑟夫c++ ZZ》     Node(int i):data(i)《约瑟夫c++ ZZ》{}
《约瑟夫c++ ZZ》    private:
《约瑟夫c++ ZZ》     int data;
《约瑟夫c++ ZZ》     Node *next, *h;
《约瑟夫c++ ZZ》};
《约瑟夫c++ ZZ》template<class T> 
《约瑟夫c++ ZZ》class cList
《约瑟夫c++ ZZ》《约瑟夫c++ ZZ》《约瑟夫c++ ZZ》{
《约瑟夫c++ ZZ》    public:
《约瑟夫c++ ZZ》《约瑟夫c++ ZZ》     cList()《约瑟夫c++ ZZ》{first=new Node; last= first ;} //建立头结点
《约瑟夫c++ ZZ》     void Insert(int i);  //在尾部插入新结点
《约瑟夫c++ ZZ》     void Next( );
《约瑟夫c++ ZZ》     void DelNode( );
《约瑟夫c++ ZZ》     void Jeson (int n, int s, int m);
《约瑟夫c++ ZZ》private:
《约瑟夫c++ ZZ》Node *first, *last, *p, *q, *r;
《约瑟夫c++ ZZ》};
《约瑟夫c++ ZZ》template<class T> void cList<T>:: Insert(int i)
《约瑟夫c++ ZZ》《约瑟夫c++ ZZ》《约瑟夫c++ ZZ》
《约瑟夫c++ ZZ》Node *m=new Node(i);
《约瑟夫c++ ZZ》  last->next=m;
《约瑟夫c++ ZZ》  last= last->next;
《约瑟夫c++ ZZ》  last->next=first;
《约瑟夫c++ ZZ》 }    
《约瑟夫c++ ZZ》template<class T> void cList<T>:: void Next( )
《约瑟夫c++ ZZ》《约瑟夫c++ ZZ》《约瑟夫c++ ZZ》{
《约瑟夫c++ ZZ》if(p!=first&&q!=first)
《约瑟夫c++ ZZ》《约瑟夫c++ ZZ》《约瑟夫c++ ZZ》{
《约瑟夫c++ ZZ》p=q;
《约瑟夫c++ ZZ》q=q->next;
《约瑟夫c++ ZZ》}
《约瑟夫c++ ZZ》else if(q= =first)
《约瑟夫c++ ZZ》《约瑟夫c++ ZZ》《约瑟夫c++ ZZ》{
《约瑟夫c++ ZZ》p=q;
《约瑟夫c++ ZZ》q=first->next;
《约瑟夫c++ ZZ》}
《约瑟夫c++ ZZ》else
《约瑟夫c++ ZZ》《约瑟夫c++ ZZ》《约瑟夫c++ ZZ》{
《约瑟夫c++ ZZ》p=q;
《约瑟夫c++ ZZ》q=q->next;
《约瑟夫c++ ZZ》}
《约瑟夫c++ ZZ》 }
《约瑟夫c++ ZZ》template<class T> void cList<T>:: void DelNode( )
《约瑟夫c++ ZZ》《约瑟夫c++ ZZ》《约瑟夫c++ ZZ》{
《约瑟夫c++ ZZ》    if(p!=null&&q!=null//删除结点
《约瑟夫c++ ZZ》《约瑟夫c++ ZZ》《约瑟夫c++ ZZ》{p->next=q->next;}
《约瑟夫c++ ZZ》          else if(q= =null)
《约瑟夫c++ ZZ》《约瑟夫c++ ZZ》                《约瑟夫c++ ZZ》{p->next=first->next;}
《约瑟夫c++ ZZ》                else
《约瑟夫c++ ZZ》《约瑟夫c++ ZZ》              《约瑟夫c++ ZZ》{first->next=p->next;}
《约瑟夫c++ ZZ》          delete q;
《约瑟夫c++ ZZ》}
《约瑟夫c++ ZZ》template<class T> void cList<T>:: Jesonph (int n, int m, int s)
《约瑟夫c++ ZZ》《约瑟夫c++ ZZ》《约瑟夫c++ ZZ》{  p=first;
《约瑟夫c++ ZZ》    q=p->next;
《约瑟夫c++ ZZ》    for(int i=1;i<s; i++)  //寻找起始点s
《约瑟夫c++ ZZ》《约瑟夫c++ ZZ》  《约瑟夫c++ ZZ》{ Next( );}
《约瑟夫c++ ZZ》     for(int i=1;i<n;i++/执行n1次,删除n1个结点,找出最终结点
《约瑟夫c++ ZZ》《约瑟夫c++ ZZ》   《约瑟夫c++ ZZ》{
《约瑟夫c++ ZZ》      for(int j=1;j<k;j++//逐个删除满足条件的结点
《约瑟夫c++ ZZ》《约瑟夫c++ ZZ》        《约瑟夫c++ ZZ》{Next( );}
《约瑟夫c++ ZZ》        cout<<q->data<<endl;
《约瑟夫c++ ZZ》        //m=q->key;若每个人手中有密码(即新的m值)则使用该语句,同时需要改变Node的
《约瑟夫c++ ZZ》        DelNode( );                                 //私有成员,和Insert函数
《约瑟夫c++ ZZ》        }
《约瑟夫c++ ZZ》      cout<<”优胜结点:”<<first->data<<endl;
《约瑟夫c++ ZZ》    }
《约瑟夫c++ ZZ》
《约瑟夫c++ ZZ》main( )
《约瑟夫c++ ZZ》《约瑟夫c++ ZZ》《约瑟夫c++ ZZ》{
《约瑟夫c++ ZZ》    int n, m, s;
《约瑟夫c++ ZZ》  cin>>n>>m>>s;
《约瑟夫c++ ZZ》  cList  jesonphlist;
《约瑟夫c++ ZZ》  for(i=1;i<=n;i++)
《约瑟夫c++ ZZ》《约瑟夫c++ ZZ》  《约瑟夫c++ ZZ》{ jesonphlist .Insert(i);}
《约瑟夫c++ ZZ》  jesonphlist. Jesonph (n, m, s);
《约瑟夫c++ ZZ》}
《约瑟夫c++ ZZ》
约瑟夫算法(带头结点的循环链表实现)

    原文作者:约瑟夫环问题
    原文地址: https://www.cnblogs.com/powerlc/archive/2005/08/26/223755.html
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞