۰
subtitle
ارسال: #۱
  
برنامه معکوس کردن لیست پیوندی یک طرفه
سلام
برنامه معکوس کردن لیست پیوندی یک طرفه در کتاب مقسمی به شرح زیر است:
;p= first
;q=nil
while p<>nil Do
begin
;r=q
;q=p
;p=p^.link
;q^.link=r
;end
;first=q
در صورتی که به نظرم این غلطه چون آخرین نود هم اشاره خواهد کرد به اولی
و این درست است:
برنامه معکوس کردن لیست پیوندی یک طرفه در کتاب مقسمی به شرح زیر است:
;p= first
;q=nil
while p<>nil Do
begin
;r=q
;q=p
;p=p^.link
;q^.link=r
;end
;first=q
در صورتی که به نظرم این غلطه چون آخرین نود هم اشاره خواهد کرد به اولی
و این درست است:
;p=r= first
;p=p^.link
while p<>nil Do
begin
;q=p
;p=p^.link
;q^.link=r
;end
;first=q
نظر شما چیه؟
من اشتباه میکنم؟
چرا؟
;p=p^.link
while p<>nil Do
begin
;q=p
;p=p^.link
;q^.link=r
;end
;first=q
نظر شما چیه؟
من اشتباه میکنم؟
چرا؟
۲
ارسال: #۲
  
برنامه معکوس کردن لیست پیوندی یک طرفه
این سه تا اشاره گر p و q و r رو مثل تام و جری و اون سگه در نظر بگیر که همش دنبال همدیگه بودن!
ما برای معکوس کردن هر گره باید آدرس گره قبلش رو داشته باشیم و همچنین چون بعد از معکوس کردن هر گره آدرس گره بعدش رو هم نیاز داریم تا بتونیم اون رو هم معکوس کنیم (اگر آدرسش رو ذخیره نکنیم بعد از معکوس کردن گره فعلی آدرس گره بعدی رو نداریم و بقیه لیست از دست میره) باید همیشه آدرس یک گره جلوتر و یک گره عقب تر رو داشته باشیم!
حالا r همیشه آدرس گره قبل و p همیشه آدرس گره بعد رو نگه می داره و q هم ادرس گره ای که میخوایم معکوسش کنیم. واسه همینه که میگیم :
q->link=r ( اشاره کردن گره فعلی به گره قبلیش)
r=q
q=p
p=p->link
ببین این سه خط اخر اشاره گرها دارن دنبال همدیگه میزارن!(همون تام و جری و سگه!) و با هم جلو میرن.
در مرحله آخر هم p به null اشاره می کنه و q به گره آخر و r به گره ما قبل آخر و وقتی ما گره آخر رو به گره ماقبل آخر اشاره می دیم باید ابتدای لیست بشه q
به این ترتیب لیست معکوس میشه و مشکلی هم پیش نمیاد
ما برای معکوس کردن هر گره باید آدرس گره قبلش رو داشته باشیم و همچنین چون بعد از معکوس کردن هر گره آدرس گره بعدش رو هم نیاز داریم تا بتونیم اون رو هم معکوس کنیم (اگر آدرسش رو ذخیره نکنیم بعد از معکوس کردن گره فعلی آدرس گره بعدی رو نداریم و بقیه لیست از دست میره) باید همیشه آدرس یک گره جلوتر و یک گره عقب تر رو داشته باشیم!
حالا r همیشه آدرس گره قبل و p همیشه آدرس گره بعد رو نگه می داره و q هم ادرس گره ای که میخوایم معکوسش کنیم. واسه همینه که میگیم :
q->link=r ( اشاره کردن گره فعلی به گره قبلیش)
r=q
q=p
p=p->link
ببین این سه خط اخر اشاره گرها دارن دنبال همدیگه میزارن!(همون تام و جری و سگه!) و با هم جلو میرن.
در مرحله آخر هم p به null اشاره می کنه و q به گره آخر و r به گره ما قبل آخر و وقتی ما گره آخر رو به گره ماقبل آخر اشاره می دیم باید ابتدای لیست بشه q
به این ترتیب لیست معکوس میشه و مشکلی هم پیش نمیاد
۰
ارسال: #۳
  
RE: برنامه معکوس کردن لیست پیوندی یک طرفه
با الگوریتم اولی یه مثال حل کردمو در پایان معکوس شدو مشکلی نداشت(پیوست)
۰
ارسال: #۴
  
RE: برنامه معکوس کردن لیست پیوندی یک طرفه
اما
این r مرحله اول که برابر q شده چرا خانه قبل از q قرار گرفته؟
من اینطوری در نظر گرفتم که دقیقا rهم اشاره میکنه به جایی که qاشاره میکنه و به همین دلیل اشتباه در میاد
و اینکه چرا اینطوری در نظرش نگیریم؟
مگه R دقیقا برابر q نیست؟ خب باید آن هم در خانه آخر قرار گیرد
در واقع من اینطوری در نظر گرفتم
این r مرحله اول که برابر q شده چرا خانه قبل از q قرار گرفته؟
من اینطوری در نظر گرفتم که دقیقا rهم اشاره میکنه به جایی که qاشاره میکنه و به همین دلیل اشتباه در میاد
و اینکه چرا اینطوری در نظرش نگیریم؟
مگه R دقیقا برابر q نیست؟ خب باید آن هم در خانه آخر قرار گیرد
در واقع من اینطوری در نظر گرفتم
۰
ارسال: #۵
  
RE: برنامه معکوس کردن لیست پیوندی یک طرفه
اشتباه ت اینه که داری لیست رو بصورت دوار (چرخشی ) در نظر میگیری، در لیست اولیه گره آخر به جایی اشاره نمی کنه پس بعد از معکوس کردن هم گره اول به جایی اشاره نباید بکنه .
ارسال: #۶
  
RE: برنامه معکوس کردن لیست پیوندی یک طرفه
(۱۸ مرداد ۱۳۹۲ ۱۲:۰۹ ق.ظ)Masoud05 نوشته شده توسط: اشتباه ت اینه که داری لیست رو بصورت دوار (چرخشی ) در نظر میگیری، در لیست اولیه گره آخر به جایی اشاره نمی کنه پس بعد از معکوس کردن هم گره اول به جایی اشاره نباید بکنه .
نه اصلا ربطی به دوار در نظر گرفتن یا نگرفتن نداره
بعدم من دوار در نظر نگرفتم لیست اولیه رو
مهمان عزیز شما قادر به مشاهده پیوندهای انجمن مانشت نمیباشید. جهت مشاهده پیوندها ثبت نام کنید.
برنامه میکنه لیست رو دوار به همین علتم میگم اشتباست و برنامه خودم درسته
۰
ارسال: #۷
  
RE: برنامه معکوس کردن لیست پیوندی یک طرفه
p= first
;q=nil
while p<>nil Do
begin
;r=q
مهم نیس r به کجا اشاره میکنه چون همون مرحله ی اول r=qمیشه یعنی r به جایی اشاره میکنه که qاشاره میکنه
من برا این rرو به نود وسطی اشاره دادم تا در نتیجه پایانی مکان نود وسط مشخص بشه
;q=nil
while p<>nil Do
begin
;r=q
مهم نیس r به کجا اشاره میکنه چون همون مرحله ی اول r=qمیشه یعنی r به جایی اشاره میکنه که qاشاره میکنه
من برا این rرو به نود وسطی اشاره دادم تا در نتیجه پایانی مکان نود وسط مشخص بشه
۰
ارسال: #۸
  
برنامه معکوس کردن لیست پیوندی یک طرفه
(۱۸ مرداد ۱۳۹۲ ۰۴:۵۶ ب.ظ)svk7 نوشته شده توسط: p= first
;q=nil
while p<>nil Do
begin
;r=q
مهم نیس r به کجا اشاره میکنه چون همون مرحله ی اول r=qمیشه یعنی r به جایی اشاره میکنه که qاشاره میکنه
من برا این rرو به نود وسطی اشاره دادم تا در نتیجه پایانی مکان نود وسط مشخص بشه
چرا مهم نیست؟
مهمه
چون بعد میخوایم بگیم qای که اشاره کرده به pحالا اشاره کنه به r
۰
ارسال: #۹
  
برنامه معکوس کردن لیست پیوندی یک طرفه
من که متاسفانه قانع نشدم باز
توضیحاتتون خوب بود وباعث میشه تو ذهنم بیشتر بمونه امامشکل منو حل نمیکنه
من نمیدونم مشکل از کجاست اگه اشتباه میکنم اگه هم نه بگید که اشتباه نمیکنم
توضیحاتتون جالب بود
دقیقا من هم همین مطلب رو میخوام بگم توی کتاب از اول لیست شروع کرده و چون لیست یک طرفه هست باعث ایجاد دور میشه چون به خانه قبل خودش میخواد اشاره کنه و خراب کاری میشه
من اومدم از دومین عنصر لیست شروع کردم و گفتم به قبلیش که عنصر اولی هست اشاره کنه و همین طور با تفسیر شما به سمت جلو حرکت کنند
چه اشتباهی میکنم؟
چرا؟
توضیحاتتون خوب بود وباعث میشه تو ذهنم بیشتر بمونه امامشکل منو حل نمیکنه
من نمیدونم مشکل از کجاست اگه اشتباه میکنم اگه هم نه بگید که اشتباه نمیکنم
توضیحاتتون جالب بود
دقیقا من هم همین مطلب رو میخوام بگم توی کتاب از اول لیست شروع کرده و چون لیست یک طرفه هست باعث ایجاد دور میشه چون به خانه قبل خودش میخواد اشاره کنه و خراب کاری میشه
من اومدم از دومین عنصر لیست شروع کردم و گفتم به قبلیش که عنصر اولی هست اشاره کنه و همین طور با تفسیر شما به سمت جلو حرکت کنند
چه اشتباهی میکنم؟
چرا؟
۰
ارسال: #۱۰
  
برنامه معکوس کردن لیست پیوندی یک طرفه
آهان این شد یه دلیل منطقی و خوب
آخه بقیه خیلی متفاوت جواب دادن
و منو متوجه اشتباهم نمیکردن
و راه حل خودشونو ارائه دادن
البته بحث کردن خیلی عالیه دیگه تا عمر دارم این مسئله رو فراموش نمیکنم
واقعا عالی بود
لذتی بردم
چه سایت ماهیه و چه کاربرایی
داشتم نا امید میشدم کم کم
آخه بقیه خیلی متفاوت جواب دادن
و منو متوجه اشتباهم نمیکردن
و راه حل خودشونو ارائه دادن
البته بحث کردن خیلی عالیه دیگه تا عمر دارم این مسئله رو فراموش نمیکنم
واقعا عالی بود
لذتی بردم
چه سایت ماهیه و چه کاربرایی
داشتم نا امید میشدم کم کم
۰
ارسال: #۱۱
  
RE: برنامه معکوس کردن لیست پیوندی یک طرفه
دوستان سلام ، در مورد این الگوریتم میشه منطق p:=p^link رو بیشتر توضیح بدین ، من دلیلشو نمیفهمم
ارسال: #۱۲
  
RE: برنامه معکوس کردن لیست پیوندی یک طرفه
۰
ارسال: #۱۳
  
RE: برنامه معکوس کردن لیست پیوندی یک طرفه
ممنون دوست عزیز، لطف کردی ، در واقع اشاره گر ها یکی یکی میان جلو
۰
ارسال: #۱۴
  
RE: برنامه معکوس کردن لیست پیوندی یک طرفه
Node *new,*p;
new->Add=Null;
p=head;
while(p->Add != Null)
{
p=Head->Add;
Node *temp;
temp->Add=new;
temp->Data=p->Data;
new=temp;
}
Head=new;[/align]
new->Add=Null;
p=head;
while(p->Add != Null)
{
p=Head->Add;
Node *temp;
temp->Add=new;
temp->Data=p->Data;
new=temp;
}
Head=new;[/align]
Can I see some ID?
Feeling left out?
نگران نباش، فقط روی این لینک برای ثبت نام کلیک کن. رمزت رو فراموش کردی؟ اینجا به یادت میاریم! close