#include <iostream.h>
#include <string.h>
#include <stdlib.h>
using namespace std;

class node
{
	friend class linklist;
	private:
                enum{len=64}	
		long int ID;
		char Name[len];
		long int Tel;
		node *next;	
	public:	
		node()
		{
			next=NULL;				
		}
		node(long int &a,char *b,long int &c)
		{
			ID=a;strncpy(Name,b,len);Tel=c;
			next=NULL;	
		}
		~node(){}
};

class linklist
{
	private:
		node *head;//头指针 
		node *p;//p始终指向当前节点
		int length; 
	public:	
		linklist();
		~linklist();
		void Freelist();//释放链表内存 			
		void insertBefore ();
		void deletedata(int &i); 
		void output();//返回输出猴子或猴子大王的相关信息
		void clearlist();
		void chooseking();		 
};

linklist::linklist()
{
	head=p=nullptr;
	length=0; 
}
linklist::~linklist()
{
	Freelist();
}
void linklist::Freelist()
{
	clearlist();
	delete head;
}
void linklist::clearlist()
{
	node *p;
	while (head!=NULL)
	{
		p=head;
		head=head->next;
		delete p;
		length--;
	}
	
}
void linklist::insertBefore()
{
	long int a;
        char b[len];
        long int c;
	//cout<<"分配内存失败!"<<endl;		
	cout<<"请输入猴子的ID,name,Tel:(中间用空格隔开)"<<endl;
	cin>>a>>b>>c;
	node *q=new node(a,b,c);
	cout<<q->ID<<q->Name<<q->Tel;
	if(head==nullptr)
		head=q;
	else
		p->next=q;
	p=q;	
	length++;
	cout<<q->ID<<q->Name<<q->Tel;	
}
bool linklist::deletedata(void)
{    
        node *q1;
    	if (head==nullptr)
           {
            cout<<"没有猴子的信息!\n";
            return false;
           }
        else
           {
            q1=head;
            while(q1->next != p)
               q1=q1->next;
            delete p;
            q1->next=nullptr;
            p=q1;
            return true;       
           }
}
void linklist::output()
{
		node *q=head;
		if (length==1)
		{
			cout<<"猴子的大王是:"<<endl;
			cout<<"猴王的ID: "<<q->ID<<endl;
			cout<<"猴王的名字:"<<q->Name<<endl;
			cout<<"猴王的Tel:"<<q->Tel;
		}
		else
		{
			for (int i=1;i<=length;i++)
			{
				cout<<"第"<<i<<"只猴子的信息是:"<<endl;
				cout<<"ID "<<q->ID<<"  "<<"name "<<q->Name<<"  "<<"Tel "<<q->Tel<<endl;
				q=q->next;
			}
		}
		
}
void linklist::chooseking()
{
	node *q=head->next,*q1;
	int a;
	do
	{		
		cout<<"你想用那个数作为筛选的基数:"<<endl;
		cin>>a;
	}while (a<=0);
	
	while (head->next->next!=head)
	{
		for (int i=1;i<a-1;i++)
		{
			q=q->next;
			if (q->next==head)
				q->next=q->next->next;
			if (q==head)
				q=q->next;	
		}
		q1=q->next;
		q->next=q->next->next;
		delete q1;
		q=q->next;
	}
}

int main ()
{
	linklist monkey;
//	monkey.linklist();
	int n,i;
	cout<<"请输入猴子的只数:"<<endl;
	cin>>n;	
	for(i=1;i<=n;i++)
	{
		cout<<i<<endl;
		monkey.insertBefore();
	}
	monkey.output();
	monkey.chooseking();
	monkey.output();
	monkey.~linklist();	
	return 0;
}