PDA

View Full Version : سوال: درج گره جدید در لیست پیوندی دو طرفه



hercool
پنج شنبه 09 دی 1389, 16:08 عصر
ممنون میشم از دوستان در رابطه با قسمت های رنگی که کردم راهنمایی کنند


void insert(node *perp , elementtype b)
{
node *newp;
newp=getnode();
if(is_full(newp)){cout<<"the memory is full";exit();}
newp->info=b;
newp->left=prep;
newp->right=prep->right;
perp->right->left=newp;
perp->right=newp;
}



در رابطه با بخش قرمز اول یه سوال دارم مگه خود newp یک متغییر نیست پس چرا اشاره گر شده؟
در رابطه با قسمت سبز رنگ سوالم اینه که وقتی ما گره جدیدی ایجاد می کنیم چطور در ان واحد می تونه پر بشه که ما داریم چکش می کنیم که پر هست یا خالی؟
قسمت سوم هم سوالم اینه که این قسمت به چه معنی هست؟

یه سوال دیگم هم این هست که گره بعدی چطور اشاره گر چپش به گره جدید اشاره می کنه؟

wanted_boy_2010
جمعه 10 دی 1389, 10:20 صبح
سلام. در رابطه با قسمت سبز رنگ:
هر برنامه تو سیستم عامل(اگه اشتباه نکنم:متفکر:) بیشتر از یه حد خاصی نمیتونه حافظه رو اشغال کنه. بخاطر همین وقتی که حافظه مجاز شما پر بشه و یک متغیر جدید تعریف کنید به اون مقدار صفر نسبت داده می شه و توی تابع is-full شما چک می کنید که اگه مقدار متغیر با صفر برابر باشه، حافظه پر شده.
قسمت بعدی: یعنی خونه ی سمت راست perp قسمت چپش برابر با newp. (برای برقراری ارتباط بین نودها--> کتاب ساختمان داده ها رو دوباره یه نگاه بنداز اونجا بیشتر توضیح داده{با شکل}:قلب:)

secondwarrior
جمعه 10 دی 1389, 15:21 عصر
1)newp->info=b;
2)newp->left=prep;
3)newp->right=prep->right;
4)perp->right->left=newp;
5)perp->right=newp;

بنده خطوط را شماره گذاری کردم تا راحت تر توضیح دهم
خط 1 که مشکلی نداره
خط 2 اشاره گر سمت چپ گره جدید را به گره اول اشاره می دهد
خط 3 اشاره گر سمت راست را به گره گره دوم نسبت می هد (Prep->right میشود گره دوم)
خط 4 اشاره گر سمت چپ گره دوم را به گره جدید نسبت می دهد
خط 5 اشاره گر سمت راست گره اول را به گره جدید نسبت می دهد
البته توجه داشته باشید که گره جدید لزوما در گره دوم لیست اضافه نمی شود
و منظورم از گره اول گرهی است که prep به آن اشاره می کند
حالا می تواند هرجایی از لیست باشد

اون قسمت سبز رنگ هم در صورتی که لیست پر نبود درج را انجام می دهد