با سلام.در ادامه سوالی که در مورد لینک لیست ها پرسیدم یه سوال دیگه داشتم.با عرض شرمندگی! در این برنامه گفته شده که به ازای ورودی 6 باید یه تابع بازگشتی داشته باشیم که حافظه های گرفته شده برای هریک از لینک لیست ها رو آزاد سازی کنه.من واقعا نمی فهمم منظور سوال چیه.من متغیر های مثل inf* , *p , *q ,... رو در تابع هام استفاده کردم.حالا چجوری این ها رو برای آزادسازی یا همون delete کردن ببرم تو یه تابع بازگشتی.اصلا چجوری میشه آزادسازی رو بازگشتی نوشت.با سپاس فروان
#include <iostream>
using namespace std;
int conter_comp=0;
int conter_mach=0;
int conter=0;
struct student
{
char name[15];
char family[15];
char college[10];
float ave;
int ID;
student *next;
student *prev;
};
student *head=0;
void _input(char name[15],char family[15],int ID ,float ave,char college[4])
{
student *p,*q;
p=q=head;
int flag=0;
student *new_student=new student;
strcpy(new_student->name,name);
strcpy(new_student->family,family);
new_student->ID=ID;
new_student->ave=ave;
strcpy(new_student->college,college);
if(!head)
{
head=new_student;
new_student->next=0;
//new_student->prev=head;
}
else
{
while(p && p->ave > ave)
{
flag=1;
q=p;
p=p->next;
}
if(flag==0)
{
head=new_student;
new_student->next=p;
p->prev=new_student;
}
else
{
//p->prev=new_student;
q->next=new_student;
new_student->prev=q;
new_student->next=p;
}
}
}
bool print_n_college(char depa[4],int number)
{
student *inf;
inf=head;
if((strcmp(depa,"COMP")==0) && (number>conter_comp) )
{
cout<<"ERR"<<endl;
return false;
}
else if((strcmp(depa,"MACH")==0) && (number>conter_comp))
{
cout<<"ERR"<<endl;
return false;
}
else
{
int k=0;
for(;inf;inf=inf->next)
{
if(strcmp(inf->college,depa)==0)
{
k++;
}
if(k==number)
{
cout<<inf->name<<' '<<inf->family<<' '<<inf->ID<<' '<<inf->ave<<' '<<inf->college<<endl;
break;
}
}
return true;
}
}
bool print_n_univ(int N)
{
student *inf;
inf=head;
if(N>conter)
{
cout<<"ERR"<<endl;
return false;
}
for(;inf;inf=inf->next)
{
for(int i=1;i<N;i++)
{
inf=inf->next;
}
cout<<inf->name<<' '<<inf->family<<' '<<inf->ID<<' '<<inf->ave<<' '<<inf->college<<endl;
break;
}
return true;
}
bool find(int id)
{
student *p;
p=head;
while(p)
{
if(p->ID==id)
return true;
p=p->next;
}
return false;
}
bool deport(int id)
{
student *p,*q;
p=q=head;
int flag=0;
if (find(id)==false)
{
cout<<"NOTFOUND"<<endl;
return false;
}
else
{
while(p && p->ID!=id)
{
flag=1;
q=p;
p=p->next;
}
if(flag==0)
{
head=p->next;
}
else
{
q->next=p->next;
}
delete p;
cout<<"DONE"<<endl;
return true;
}
}
void show(char depa[4],int x)
{
student *inf,*p;
p=inf=head;
if(x==1)
{
for(;inf;inf=inf->next)
{
if(strcmp(inf->college,depa)==0)
{
cout<<inf->name<<' '<<inf->family<<' '<<inf->ID<<' '<<inf->ave<<' '<<inf->college<<endl;
}
}
}
else
{
for(;inf;inf=inf->next)
{
p=inf;
}
for(;p;p=p->prev)
{
if(strcmp(p->college,depa)==0)
{
cout<<p->name<<' '<<p->family<<' '<<p->ID<<' '<<p->ave<<' '<<p->college<<endl;
}
}
}
}
/*void release()
{
}*/
int main()
{
char name[15];
char family[15];
char college[10];
float ave;
int ID;
int in=0;
while(in!=6)
{
cin>>in;
if(in==1)
{
cin>>name;
cin>>family;
cin>>ID;
cin>>ave;
cin>>college;
if(strcmp(college,"COMP")==0)
conter_comp++;
if(strcmp(college,"MACH")==0)
conter_mach++;
conter++;
_input(name,family,ID,ave,college);
}
if(in==2)
{
char dep[4];
int number;
cin>>dep;
cin>>number;
print_n_college(dep,number);
}
if(in==3)
{
int n=0;
cin>>n;
print_n_univ(n);
}
if(in==4)
{
int id=0;
cin>>id;
deport(id);
}
if(in==5)
{
char dep[4];
int number;
cin>>dep;
cin>>number;
show(dep,number);
}
/*if(in==6)
{
}*/
}
return 0;
}</span>