






















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);
}
约瑟夫算法(带头结点的循环链表实现)
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。