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);
}

约瑟夫算法(带头结点的循环链表实现)
posted on
2005-08-26 21:54
powerlc
阅读(
605)
评论()
收藏
举报