注册 登录
编程论坛 VC++/MFC

约瑟夫单循环链表的c++实现

yoyolive 发布于 2010-10-17 03:14, 425 次点击
哪位可以帮下
1 回复
#2
m21wo2010-10-17 09:09
程序代码:
#include <iostream>
using namespace std;
template <class T>
class Node
{
public:
    T  element;
    Node<T> *link;
    Node(T elem=0,Node<T>* lk=0):element(elem),link(lk)
    {}
    template <class T> friend void Josephus(Node<T>*& first, int m);
};


template <class T>
void Josephus(Node<T>*& first, int m)
{
    Node<T> *q=first,*p=first;
    while(p&&p!=p->link)
    {
        for(int i=1;i<m;q=p,p=p->link)
            i++;
        cout<<p->element<<"  ";
        q->link=p->link;
        delete p;p=q->link;
    }
    if(p)
    {
        cout<<p->element<<"  ";
        delete p;
    }
    first=NULL;
}

int main()
{
    int s,n;
    cout<<"请输入人数:";
    cin>>n;
    cout<<"请输入间隔:";
    cin>>s;
    Node<int> *u=new Node<int>(1,0);
    u->link=u;                               //构成循环链表
    Node<int> *q=u;
    for(int i=2;i<=n;i++)
    {
        q->link=new Node<int>(i,q->link);
        q=q->link;
    }
    Josephus(u,s);
    cout<<endl;

}
1