PDA

View Full Version : سوال: توضیح کد



hafez1
شنبه 08 مهر 1391, 21:06 عصر
می خاسم یه نفر این کدو توضیح بده



.
#ifndef MDLL_H
#define MDLL_H
template <typename T> class mnode
{
public :
T d ;
mnode<T> * n ;
};
template <typename Z> class mdll
{
public :
mnode<Z> * h ;
mnode<Z> * t ;
mdll():h(0),t(0){}
void pushfront (Z d);
void pushback (Z d);
Z popfront ();
mdll(mdll<Z> const & x) ;
};
template <typename T> void mdll<T>::pushfront(T d)
{
mnode<T> * tmp = new mnode<T> ;
tmp->d = d ;
tmp->n = h ;
h = tmp ;
if ( t == 0 ) t = h ;
}
template <typename T> void mdll<T>::pushback(T d)
{
if ( h == 0 )
{
pushfront(d);
return ;
}
mnode<T> * tmp = new mnode<T> ;
tmp->d = d ;
tmp->n = 0 ;
t ->n = tmp ;
t = tmp ;
}
template <typename S> S mdll<S>::popfront ()
{
if ( h == 0 )
throw"empty link list" ;
S d = h ->d ;
mnode<S> * tmp = h ;
h = h ->n ;
if ( h == 0 ) t = h ;
delete tmp ;
return d ;
}
template <typename T> mdll<T>::mdll(mdll<T> const & x):h(0),t(0)
{
mnode<T> * tmp = x.h ;
while ( tmp )
{
pushback(tmp->d);
tmp = tmp->n ;
}
}


#endif// MDLL_H

hafez1
دوشنبه 10 مهر 1391, 21:17 عصر
من واقعا به توضیح این کد نیاز دارم.اگه کلش طول می کشه فقط کپی کانستراکتورش که قسمت آخره توضیح بدید.
ممنون

hadi0x7c7
سه شنبه 11 مهر 1391, 22:55 عصر
این کد اصلا قابل خواندن نیست !
لطفا درست پست کنید.

rubiks.kde
چهارشنبه 12 مهر 1391, 14:57 عصر
این کد مربوط به پیاده سازی یه جور queue که در اون شما شی که میخواهید به لینک لیست اضافه کنید رو از نوع کلاس mnode باید تعریف کنید (تمام کلاس ها هم به صورت templateتعریف شدن تا کار برای کاربر راحت باشه هر نوع داده که خواست براش این کلاس قابل استفاده باشه) و کلاس mdll هم در واقع همون صف شما می باشه که شما میتونی هم به اول صف و هم به آخر صف با توابع pushback و pushfront اضافه کنی ولی تنها میتونی از اول صف با تابع popfront عمل حذف رو انجام بدی عملیاتی هم که در هر تابع صورت میگیره دقیقا مفهوم های خود تابع است برای مثال برای حذف از اول صف ابتدا چک میکنه که آیا صف خالیه یا نه و کارهای دیگه (h تعداد mnode ها رو توی صف مشخص میکنه).

در مورد کانستراکتورش هم زمانی که شما یک شی از کلاس mdll میسازی به عنوان وردی یک شی دیگه از همین کلاس رو میگیره بعد چون ورودی به صورت const تعریف شده اون رو داخل یک tmp قرار میده بعد هم در while نوشته شده تا زمانی که شی از نوع mnode توی tmp وجود داره جلو میره و اون ها رو به this که در واقع همون شی تازه ساخته شده می باشه اضافه می کنه

hafez1
شنبه 15 مهر 1391, 22:55 عصر
این کد تصحیح کد اوله.


#ifndef MDLL_H
#define MDLL_H
template <typename T> class mnode
{
public :
T d ;
mnode<T> * n ;
};
template <typename Z> class mdll
{
public :
mnode<Z> * h ;
mnode<Z> * t ;
mdll():h(0),t(0){}
void pushfront (Z d);
void pushback (Z d);
Z popfront ();
mdll(mdll<Z> const & x) ;
~mdll()
{
mnode<Z> * tmp = h ;
while ( tmp )
{
mnode<Z> * tmp2 = tmp->n ;
delete tmp ;
tmp = tmp2 ;
}
h = t = 0 ;
}
mdll<Z> & operator = (mdll<Z>const x )
{
this->~mdll ();
mnode<Z> * tmp = x.h ;
while ( tmp )
{
pushback(tmp->d);
tmp = tmp->n ;
}
return * this ;
}
};
template <typename T> void mdll<T>::pushfront(T d)
{
mnode<T> * tmp = new mnode<T> ;
tmp->d = d ;
tmp->n = h ;
h = tmp ;
if ( t == 0 ) t = h ;
}
template <typename T> void mdll<T>::pushback(T d)
{
if ( h == 0 )
{
pushfront(d);
return ;
}
mnode<T> * tmp = new mnode<T> ;
tmp->d = d ;
tmp->n = 0 ;
t ->n = tmp ;
t = tmp ;
}
template <typename S> S mdll<S>::popfront ()
{
if ( h == 0 )
throw "empty link list" ;
S d = h ->d ;
mnode<S> * tmp = h ;
h = h ->n ;
if ( h == 0 ) t = h ;
delete tmp ;
return d ;
}
template <typename T> mdll<T>::mdll(mdll<T> const & x):h(0),t(0)
{
mnode<T> * tmp = x.h ;
while ( tmp )
{
pushback(tmp->d);
tmp = tmp->n ;
}
}


#endif // MDLL_H

چن تا سوال از این کد داشتم.لطفا هر چه زودتر راهنمایی کنید فردا امتحان دارم.
یکی اینکه کپی کانستراکتور ینی قسمت آخر کدرو توضیح بدید
mnode<T> * tmp = x.h ;این قسمتشو نمی فهمم.
یکی دیگه از اشکالام توی سربارگذاری عکلگر=هست.کمکم کنید.