حرکت در ۲ لینک لیست بدون لیست کمکی - هفت خط کد انجمن پرسش و پاسخ برنامه نویسی

حرکت در ۲ لینک لیست بدون لیست کمکی

0 امتیاز

با سلام.من تابعی می خوام که دانشجوی n ام یک دانشگاه را نشان دهد.شرایط به این ترتیب است که این دانشگاه دو دانشکده دارد که برای هرکدام یک head تعریف می کنیم.در واقع اطلاعات دانشچویان هر دانشکده  براساس معدل (به صورت نزولی) داخل لینک لیست مربوطه می باشد.یعنی ما دو لینک لیست داریم.حالا من می خوام بدون استفاده از یک لینک لیست کمکی داخل دو لینک لیست حرکت کنم و اطلاعت  دانشجوی n ام دانشگاه را چاپ کنم.تابعی که من نوشتم کامل نیست و نمی تونم اشکالشو برطرف کنم. اگه ممکنه در این مورد به من کمک کنید.

مثال: comp: 20-19-15-14

mach:18-17-16

دانشجوی سوم: 18


bool print_n_univ(int N)
{
	int i=0;
	student *comp,*mach,*tmp1,*tmp2;
	comp=headcomp;
	mach=headmach;
	tmp1=headcomp;
	tmp2=headmach;
	if(N>conter)
	{
		cout<<"ERR"<<endl;
		return false;
	}
	while(i<N)
	{
		if(comp->ave > mach->ave)
		{
			tmp1=comp;
			comp=comp->next;
		}
		else
		{
			tmp2=mach;
			mach=mach->next;
		}
		
		i++;
	}
	if(tmp1->ave > tmp2->ave)
	{
		cout<<tmp1->name<<' '<<tmp1->family<<' '<<tmp1->ID<<' '<<tmp1->ave<<' '<<tmp1->college<<endl;
	}
	else
	{
		cout<<tmp2->name<<' '<<tmp2->family<<' '<<tmp2->ID<<' '<<tmp2->ave<<' '<<tmp2->college<<endl;
	}
    return true;
}
سوال شده اسفند 2, 1392  بوسیله ی maryam (امتیاز 338)   12 33 44
دوباره تگ گذاری شد فروردین 11, 1393 بوسیله ی BlueBlade

2 پاسخ

+3 امتیاز
 
بهترین پاسخ

به این شکل بنویس :

bool print_n_univ(int N)
{
    int i=0;
    student *comp,*mach,*tmp;
    comp=headcomp;
    mach=headmach;
    if(N>conter || N<1 )
    {
        cout<<"ERR"<<endl;
        return false;
    }
    while(i<N  )
    {
        if(comp==NULL)
        {
            tmp=mach;
            mach=mach->next;
        } 
        else if(mach==NULL)
        {
            tmp=comp;
            comp=comp->next;
        }
        else if(comp->ave > mach->ave)
        {
            tmp=comp;
            comp=comp->next;
        }
        else
        {
            tmp=mach;
            mach=mach->next;
        }
        i++;
    }

    cout<<tmp->name<<' '<<tmp->family<<' '<<tmp->ID<<' '<<tmp->ave<<' '<<tmp->college<<endl;
    return true;
}

 

پاسخ داده شده اسفند 2, 1392 بوسیله ی PSPCoder (امتیاز 1,301)   14 40 57
انتخاب شد اسفند 3, 1392 بوسیله ی maryam
خیلییییییییییییی ممنون
+2 امتیاز

شما باید اینو هم بررسی کنی که اگر تعداد یکی بیشتر بود هم مشکلی ایجاد نشه مثلا اگر لیست به این شکل بود

۱۸

۱۲ ۱۴ ۱۴ ۱۵

 

if(comp==NULL)
{
    
    tmp2=mach;
    mach=mach->next;
}  
else if(mach==NULL)
{
    tmp1=comp;
    comp=comp->next;
}
else if(comp->ave > mach->ave)
{
    tmp1=comp;
    comp=comp->next;
}
else
{
    tmp2=mach;
    mach=mach->next;
}

 

پاسخ داده شده اسفند 2, 1392 بوسیله ی BlueBlade (امتیاز 15,315)   15 18 89
ببخشید ولی با این کد به ازای هر n فقط دانشجوی اول رو چاپ می کنه.
این کدی که گذاشتم رو داخل while گذاشتین دیگه به جای اون if ,else  ؟
بله.کد شما رو داخل همون while گذاشتم.
به جای N بزار N-1 (شرط while )
...