高分悬赏 请各位大虾看看下面的程序出了什么问题,帮帮忙!
#include<iostream.h>
class CircList;
class CircListNode{
friend class CircList;
private:
int data;
CircListNode*next;
public:
CircListNode(int d=0):next(NULL){data=d;}
};
class CircList{
private:
CircListNode*first,*current;
public:
CircList();
~CircList(){delete first; first=first->next=NULL;}
void Insert(int i,int value);
int Remove();
void Move(int s);
void Next(int m);
int Getdata(){return first->data;}
};
CircList::CircList():first(NULL),current(NULL){ }
void CircList::Insert(int i,int value){
if(first==NULL||i==1)
{
first=new CircListNode(0);
first->next=first;
first->data=value;
current=first;}
else{
CircListNode*p=new CircListNode(1);
p->data=value;
for(int j=i;j>2;j--)
first=first->next;
p->next=first->next;
first->next=p;
}
current=first;
cout<<"输入完毕";
}
void CircList::Next(int m){
for(int j=m;j>2;j++){
first=current;
first=first->next;}}
int CircList::Remove(){
CircListNode*q;
q=first->next;
first->next=q->next;
q->next=NULL;
return q->data;}
void CircList::Move(int s){
for(int j=s;j>1;j++)
first=first->next;}
void jose(int n,int m){
CircList a;
for(int i=0;i<n-1;i++)
{
if(i%m==0){
a.Next(m);
cout<<a.Remove()<<"出局!"<<endl;}}
cout<<a.Getdata()<<"胜出!"<<endl;
}
void main(){
int s,n,m;
CircList b;
cout<<"请输入起始位置,报数长度,总人数 "<<endl;
cin>>s>>m>>n;
if((s>0&&s<=n)&&(m>0&&m<=n)){
for(int i=1;i<=n;i++)
b.Insert(i,i);
b.Move(s);
jose(n,m);}
else
cout<<"数据错误 ,请重新输入!"<<endl;
}