template<class T> cList;
template<class T>
class Node
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](/Images/OutliningIndicators/ContractedBlock.gif)
{
friend cList<T>;
public:
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
Node( )
{};
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
Node(int i):data(i)
{}
private:
int data;
Node *next, *h;
};
template<class T>
class cList
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](/Images/OutliningIndicators/ContractedBlock.gif)
{
public:
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
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)
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](/Images/OutliningIndicators/ContractedBlock.gif)
{
Node *m=new Node(i);
last->next=m;
last= last->next;
last->next=first;
}
template<class T> void cList<T>:: void Next( )
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](/Images/OutliningIndicators/ContractedBlock.gif)
{
if(p!=first&&q!=first)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
{
p=q;
q=q->next;
}
else if(q= =first)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
{
p=q;
q=first->next;
}
else
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
{
p=q;
q=q->next;
}
}
template<class T> void cList<T>:: void DelNode( )
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](/Images/OutliningIndicators/ContractedBlock.gif)
{
if(p!=null&&q!=null) //删除结点
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
{p->next=q->next;}
else if(q= =null)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{p->next=first->next;}
else
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{first->next=p->next;}
delete q;
}
template<class T> void cList<T>:: Jesonph (int n, int m, int s)
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](/Images/OutliningIndicators/ContractedBlock.gif)
{ p=first;
q=p->next;
for(int i=1;i<s; i++) //寻找起始点s
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{ Next( );}
for(int i=1;i<n;i++) /执行n-1次,删除n-1个结点,找出最终结点
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
for(int j=1;j<k;j++) //逐个删除满足条件的结点
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{Next( );}
cout<<q->data<<endl;
//m=q->key;若每个人手中有密码(即新的m值)则使用该语句,同时需要改变Node的
DelNode( ); //私有成员,和Insert函数
}
cout<<”优胜结点:”<<first->data<<endl;
}
![](/Images/OutliningIndicators/None.gif)
main( )
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](/Images/OutliningIndicators/ContractedBlock.gif)
{
int n, m, s;
cin>>n>>m>>s;
cList jesonphlist;
for(i=1;i<=n;i++)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{ jesonphlist .Insert(i);}
jesonphlist. Jesonph (n, m, s);
}
![](/Images/OutliningIndicators/None.gif)
约瑟夫算法(带头结点的循环链表实现)
posted on
2005-08-26 21:54
powerlc
阅读(
603)
评论()
编辑
收藏
举报