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  阅读(603)  评论(0编辑  收藏  举报