تالار گفتمان مانشت
کمک فوری در لیست های پیوندی یک طرفه - نسخه‌ی قابل چاپ

صفحه‌ها: ۱ ۲ ۳
RE: کمک فوری در لیست های پیوندی یک طرفه - yaser_ilam_com - 30 اردیبهشت ۱۳۹۱ ۱۰:۳۸ ب.ظ

(۳۰ اردیبهشت ۱۳۹۱ ۱۰:۳۲ ب.ظ)sajad2020 نوشته شده توسط:  سلام-دوست عزیز اینم تابع حذف یک گره از انتهای لیست که استاد ما گفته منم میخوام شما اضافه کردن را اینطوری بنویسید!

void delete (node*s)
{if(s==null)cout<<"invalid delete";return;}
if(s->next==null){delet(s);s=null;}
else
{
node*p=s;
while(p->next->next!=null)
p=p->next;
delet(p->next);
p->next=null;
}

در مورد سوال قبل sابتدای لیست, pانتهای لیست میباشد
ببین برو اول قسمت ویرایش کامل دکمه # رو بزن و کد رو داخلش بزار و بازم همین دکمه رو بزن این برا کد نوشتن قرار داده شده
در مورد سوالتون چشم بزار سوال رو تحلیل کنم برات قرار میدم[/code]

کد:
void delete (node*s)
{if(s==null)cout<<"invalid delete";return;}
if(s->next==null){delet(s);s=null;}
else
{
node*p=s;
while(p->next->next!=null)
p=p->next;
delet(p->next);
p->next=null;
}
خوب تو گفتی لیست پیوندی یک طرفه با این p->next->next میشه فهمید لیست دوپیوندی هستش

کمک فوری در لیست های پیوندی یک طرفه - sajad2020 - 30 اردیبهشت ۱۳۹۱ ۱۰:۵۰ ب.ظ

ولی استاد ما اینجوری گفته حالا اگه یکی باشه درست میشه!

این خطnode*p=sچکار میکنه؟

کمک فوری در لیست های پیوندی یک طرفه - yaser_ilam_com - 30 اردیبهشت ۱۳۹۱ ۱۱:۰۱ ب.ظ

اگه منظورت حذف از یکطرفه هستش ببین این کد بعد while نمیدونم چیکار کرده شرط داحل while میگه تا زمانی که مخالف null هست ادامه بده حالا کد بعدی میگه پیمایش کن یعنی هر بار جلو میره و به گره بعد اشاره میکنه آخرش هم با دشتور delete معلوم نیست چیکار کرده
من حذف رو با تصویر برات ۵ دقیقه دیگه قرار میدم کمی صبر کن
ptr : به گره حذف شده اشاره دارد
preptr : به گره ماقبل گره حذف شده اشاره دارد
حال گره ما قبل گره ای که میخواهیم حذف کنیم به جایی اشاره دارد که گره قابل حذف اشاره دارد
بعد هم ptr را حذف می کنیم که در این صورت گره از مدار خارج میشود

این نحوه حذف کردن گره در لیست یک طرفه هستش

کمک فوری در لیست های پیوندی یک طرفه - sajad2020 - 30 اردیبهشت ۱۳۹۱ ۱۱:۱۲ ب.ظ

به به نظر شما این کد اینطوری نیست؟که میگه تا زمانی که p->nextمخالف nullهست یکی یکی برو جلو بعد وقتی به اخر رسید حذف کن میشه اکولاد نذاشته ؟

RE: کمک فوری در لیست های پیوندی یک طرفه - yaser_ilam_com - 30 اردیبهشت ۱۳۹۱ ۱۱:۱۵ ب.ظ

(۳۰ اردیبهشت ۱۳۹۱ ۱۱:۱۲ ب.ظ)sajad2020 نوشته شده توسط:  به به نظر شما این کد اینطوری نیست؟که میگه تا زمانی که p->nextمخالف nullهست یکی یکی برو جلو بعد وقتی به اخر رسید حذف کن میشه اکولاد نذاشته ؟
خوب یکی یکی جلو بره درست اما بره تا به گره قابل حذف برسه و آخر باید حذف کنه با دستوری که بالا نوشتم ببین می فهمی که این کد عیب داره البته گفتم شاید این در مورد لیست دو پیوندی نوشته که بازم من نگاه کردم اصلا اینجوری نیست

کمک فوری در لیست های پیوندی یک طرفه - sajad2020 - 30 اردیبهشت ۱۳۹۱ ۱۱:۱۶ ب.ظ

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

RE: کمک فوری در لیست های پیوندی یک طرفه - yaser_ilam_com - 30 اردیبهشت ۱۳۹۱ ۱۱:۲۱ ب.ظ

(۳۰ اردیبهشت ۱۳۹۱ ۱۱:۱۶ ب.ظ)sajad2020 نوشته شده توسط:  اگه بخواهیم کدش بنویسیم مثل تابعی که من نوشتم چطوری مینویسیم؟
ببین اول باید تعیین کنی کدوم گره رو می خوای حذف کنی یعنی داخل while بنویسی برو تا به مثلا گره با داده معادل ۲۲ رسیدی اونوقت p به اون گره اشاره کنه و یه اشاره گر دیگه بازم باید پیمایش کنه تا به قبل از اون برسه و بعد کد مربوطه و بعد delete

کمک فوری در لیست های پیوندی یک طرفه - sajad2020 - 30 اردیبهشت ۱۳۹۱ ۱۱:۳۰ ب.ظ

دوست عزیز شکل و با چی میکشی؟من بکشم بعد توضیح بدم شما ببینید درسته؟

بعدش توی تابع گره ای که قرار حذف بشه و گره ماقبلش باید با دستور node*sایجاد کنیم یا new node هم میخواد توی اون کدی که استاد ما نوشته new node نذاشته!

RE: کمک فوری در لیست های پیوندی یک طرفه - yaser_ilam_com - 30 اردیبهشت ۱۳۹۱ ۱۱:۳۴ ب.ظ

(۳۰ اردیبهشت ۱۳۹۱ ۱۱:۳۰ ب.ظ)sajad2020 نوشته شده توسط:  دوست عزیز شکل و با چی میکشی؟من بکشم بعد توضیح بدم شما ببینید درسته؟

بعدش توی تابع گره ای که قرار حذف بشه و گره ماقبلش باید با دستور node*sایجاد کنیم یا new node هم میخواد توی اون کدی که استاد ما نوشته new node نذاشته!
من با paint رسم میکنم

فرقی نداره یکی هستن حتی دستودgetnode هم وجود داره

کمک فوری در لیست های پیوندی یک طرفه - sajad2020 - 30 اردیبهشت ۱۳۹۱ ۱۱:۴۴ ب.ظ

شرمنده دوست عزیز میشه کدشو مثل تابع من برای حذف گره ای که من با شکل کشیدم بنویسی؟

برای افزودن شکل چکار کنم
میخواهم گرهkرو حذف کنیم

کمک فوری در لیست های پیوندی یک طرفه - yaser_ilam_com - 31 اردیبهشت ۱۳۹۱ ۱۲:۰۱ ق.ظ

ببین کدش کمی طولانی میشه الانم دیر وقته فردا برات قرار میدم
برای افزودن شکل هم شما باید اول بری قسمت پیش نمایش ارسال بعد قسمت پایین choose محل قرار گرفتن عکس رو انتخاب کنی بعد دکمه افزودن پیوست رو بزن و ارسال کن
موفق باشی
شب بخیر

RE: کمک فوری در لیست های پیوندی یک طرفه - sajad2020 - 31 اردیبهشت ۱۳۹۱ ۱۲:۵۷ ق.ظ

میخواهیم گره kرو حذف کنیم

باید حتما اطلاعاتinfoرو داشته باشیم تا بتونیم سرچ کنیم یا نه اسم گره کفایت میکنه-شرمنده اگه میشه تابع اینو بنویسید با توضیح ممنون

ایا نیاز نیست اسم همه گره ها رو داشته باشیم من اسم گره دوم ندادم؟

کمک فوری در لیست های پیوندی یک طرفه - sajad2020 - 31 اردیبهشت ۱۳۹۱ ۰۴:۵۴ ق.ظ

در نوشتن توابع ایا فرض بر اینه که گره ها از قبل ایجاد شده اند یا نه تعریف میکنیم؟

RE: کمک فوری در لیست های پیوندی یک طرفه - yaser_ilam_com - 31 اردیبهشت ۱۳۹۱ ۰۲:۰۵ ب.ظ

ابتدا با توضیح الگوریتم کار رو برات توضیح میدم بعد با شکل و آخرش کد رو می نویسم خواهشا دقت کن چون موضوع سختی نیست خیلی هم داره طول میکشه :

ببین ابتدا فرض بر این است که لیست ایجاد شده و گره ها در جای خود قرار دارند .

دو اشاره گر داریم که یکی به ابتدای لیست و اولین گره اشاره دارد که first هستش و یکی به انتهای لیستکه last هستش

حال ما می خواهیم گره ای که مقدار آن stnum هست رو حذف کنیم ابتدا باید لیست را سرچ کنیم تا گره به دست آید بعد سه حالت داریم :

۱) مقدار در اولین گره است که این حالت مخصوص به خود را دارد ( عین اضافه )
۲) مقدار در آخرین گره است که این حالت مخصوص به خود را دارد ( عین اضافه )
۳)گره در مابین آخر و اول هست که برایتان نوشتم باید چکار کرد و در کد هم دوباره ذکر می کنیم

حالا اگه بخواییم اول تابع ایجاد لیست و تعریف گره در لیست رو بنویسیم بحثی دیگس که به خودت واگذار می کنم حالا کد رو با شکل قرار میدم رو شکل کد رو توضیح دادم .

کد:
void linklist::delnode ()
{
node  *h,*p;
int strnum;
if(first==null)
{
cout<<"list is empty";
return;
}
cout<<"enter stnum for delete";
cin>>stnum;
h=p=first;
while (h!=null)
{
if (h->info != stnum)
{
p=h;
h=h->next;
continue;
}
else
{
if(h==first)
{
first=h->next;
delete h;
delete p;
break;
}
else if(h==last)
{
last=p;
p->next=h->next;
delete h;
break;
{
else if(h->info==stnum)
{
p->next=h->next;
delete h;
}
}}
امیدوارم ذهنت رو باز کنه ببین کد استادت یا به چیز دیگه ای داره اشاره میکنه یا اشتباه نوشتی

کمک فوری در لیست های پیوندی یک طرفه - sajad2020 - 14 خرداد ۱۳۹۱ ۰۶:۲۸ ق.ظ

سلام دوست عزیز ممنون از لطفت-