24小时热门版块排行榜    

查看: 334  |  回复: 2

冰雨hust

铁虫 (小有名气)

[求助] C++数据结构循环链表约瑟夫问题

#include <iostream>
using namespace std;

template <class T>
struct Node
{
        T data;
    Node<T> *next;
};

template <class T>
class CLinkList
{
public:
        CLinkList(){rear=new Node<T>;rear->next=rear;}
        CLinkList(T a[],int n);
        int Josephus(int m,int n);
private:
        Node <T> *rear;
};

template <class T>
CLinkList<T>::CLinkList(T a[],int n)
{
        rear=new Node<T>;
        rear->next=rear;
        for (int i=0;i<n;i++)
        {
                Node <T>*s=new Node <T>;
                s->data = a;
                s->next = rear->next;
                rear->next = s;
                rear = s;
        }
        Node <T>*p = rear->next;
        rear->next = p->next;
        delete p;
}

template <class T>
int CLinkList<T>::Josephus(int m,int n)
{
        int x,i;
        Node <T>*p=rear->next;
        if (n==1||m==1)
        {
                x=n;
        }
        else
        {
                while(n!=1)
                {
                        i=1;
                        while (p&&i!=(m-1))
                        {
                                p=p->next;
                                i++;
                        }
                        Node <T> *q = p->next;
                        p->next = q->next;
                        delete q;
                        p = p->next;
                        n--;
                }
                rear=p;
                x=p->data;
        }
        return x;
}

int main()
{
        int M,N,a[1024];
        cout<<"the number of people:";
        cin>>N;
        if (N>=1024)
        {
                cout<<"Error!Please put in a smaller number.";
                return 0;
        }
        cout<<"the number they count:";
        cin>>M;
        if (M<=0)
        {
                cout<<"Error!Please put in a positive number:";
                return 0;
        }
        for (int i=0;i<N;i++)
        {
                a = i+1;
        }
        CLinkList<int> A(a,N);
        cout<<"the last number is:"<<A.Josephus(M,N)<<endl;
        return 0;
}

我不知道在template <class T>
CLinkList<T>::CLinkList(T a[],int n)的最后为啥要加上:
       Node <T>*p = rear->next;
        rear->next = p->next;
        delete p;
这一段代码,请高人指点,谢谢~~~
回复此楼
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

libralibra

至尊木虫 (著名写手)

骠骑将军

【答案】应助回帖

感谢参与,应助指数 +1

libralibra

至尊木虫 (著名写手)

骠骑将军

【答案】应助回帖

相关版块跳转 我要订阅楼主 冰雨hust 的主题更新
信息提示
请填处理意见