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