زمان کنونی: ۲۹ اردیبهشت ۱۴۰۴, ۰۴:۵۱ ق.ظ مهمان گرامی به انجمن مانشت خوش آمدید. برای استفاده از تمامی امکانات انجمن میتوانید عضو شوید. گزینههای شما (ورود — ثبت نام)
سلام-دوستان من تابع اضافه کردن به لیست پیوندی یک طرفه را در زبان سی پلاس پلاس به این صورت میخوام۱
الف)اضافه کردن به ابتدا لیست
ب)اضافه کردن به انتهای لیست
ج)اضافه کردن به وسط لیست
فرض میکنیم ابتدای لیستsنام دارد و انتها ان q
استاد ما یه جور میگه که من متوجه نمیشم اگه امکان داره اینا رو با توضیح کامل به من بدید ممنون از راهنماییتان
ابتدا با توضیح الگوریتم کار رو برات توضیح میدم بعد با شکل و آخرش کد رو می نویسم خواهشا دقت کن چون موضوع سختی نیست خیلی هم داره طول میکشه :
ببین ابتدا فرض بر این است که لیست ایجاد شده و گره ها در جای خود قرار دارند .
دو اشاره گر داریم که یکی به ابتدای لیست و اولین گره اشاره دارد که first هستش و یکی به انتهای لیستکه last هستش
حال ما می خواهیم گره ای که مقدار آن stnum هست رو حذف کنیم ابتدا باید لیست را سرچ کنیم تا گره به دست آید بعد سه حالت داریم :
۱) مقدار در اولین گره است که این حالت مخصوص به خود را دارد ( عین اضافه )
۲) مقدار در آخرین گره است که این حالت مخصوص به خود را دارد ( عین اضافه )
۳)گره در مابین آخر و اول هست که برایتان نوشتم باید چکار کرد و در کد هم دوباره ذکر می کنیم
حالا اگه بخواییم اول تابع ایجاد لیست و تعریف گره در لیست رو بنویسیم بحثی دیگس که به خودت واگذار می کنم حالا کد رو با شکل قرار میدم رو شکل کد رو توضیح دادم .
ببین من خودم متوجه نمیشدم اما کتاب ساختمان داده جعفر نژاد از لحاظ کد نویسی مطالب بهتر گفته و خوب هم توضیح داده فقط کامل مطالب رو بیان نکرده حالا دقت کن ...من با کمی توضیح برات قرار میدم
فرض کن گره ای مثل d را به ابتدای لیست می خواهیم اضافه کنیم حالا فیلد آدرس آن باید به ابتدای لیست اشاره کند و سپس اشاره گری که قبلا به ابتدای لیست اشاهره میکرد به گره جدید اشهره نماید دستورات این عمل به صورت زیر در کتاب مذکور بیان شده است
کد:
d= new node;
d->info=400;
d->next=p;
p=d;
توضیح کد خط ها :
خط اول : این کد خط توسط تابع new گره ای به نام d را ایجاد میکند
خط دوم : قسمت info در این گره مقدار ۴۰۰ را به خود میگیرد
خط سوم : اشاره گر p به ابتدای لیست اشاره دارد حال فیلد آدرس d به اشاره گر اول لیست اشاره می کند
خط چهارم : حال جایی که p اشاره می کند d هم اشاره می کند
سلام-ممنون تا اینجا مشکلی نیست ادامه بدید!
اگه میشه تابع ان هم بنویسید و توضیح بدید شرمنده
شرمنده من خط اخرو متوجه نمیشم p=d یعنی چی جای که Dاشاره میکنه Pهم اشاره میکنه مگهDگره نیست اما Pاشاره گره؟میشه با رسم شکل توضیح بدید!من گره و اشاره گر ها رو قاطی کردم شرمنده!
(۲۷ اردیبهشت ۱۳۹۱ ۱۱:۲۵ ق.ظ)sajad2020 نوشته شده توسط: شرمنده من خط اخرو متوجه نمیشم p=d یعنی چی جای که Dاشاره میکنه Pهم اشاره میکنه مگهDگره نیست اما Pاشاره گره؟میشه با رسم شکل توضیح بدید!من گره و اشاره گر ها رو قاطی کردم شرمنده!
شرمنده فعلا باید برم شرکت سر کار امشب کامل با شکل برات میگم
موفق باشی
(۲۹ اردیبهشت ۱۳۹۱ ۰۲:۳۲ ب.ظ)sajad2020 نوشته شده توسط: ببین نمیخواد تا پیدا کردن گره قبل از ان گره جدید و جستجو کنیم؟
چرا باید این کار رو حتما بکنی تا اشتره گر رو به قبل اون گره جدید برسونی از طریق کد زیر :
ptr=ptr -> next این کد را ادامه می دهیم تا اشاره گر ptr را به محل درست برسانیم :
راستی این کد پیمایش لیست هستش :
کد:
ptr=first;
while (ptr!=null)
{
process(ptr -> info)
ptr=ptr -> next ;
{
این کد پیمایش لیست هست تا به null که آخر لیست رو نشون میده
این کد ها بیشتر فکر کنم از روی کتاب داده جعفر نژاد برداشتم
(۳۰ اردیبهشت ۱۳۹۱ ۱۰:۳۲ ب.ظ)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]
اگه منظورت حذف از یکطرفه هستش ببین این کد بعد while نمیدونم چیکار کرده شرط داحل while میگه تا زمانی که مخالف null هست ادامه بده حالا کد بعدی میگه پیمایش کن یعنی هر بار جلو میره و به گره بعد اشاره میکنه آخرش هم با دشتور delete معلوم نیست چیکار کرده
من حذف رو با تصویر برات ۵ دقیقه دیگه قرار میدم کمی صبر کن
ptr : به گره حذف شده اشاره دارد
preptr : به گره ماقبل گره حذف شده اشاره دارد
حال گره ما قبل گره ای که میخواهیم حذف کنیم به جایی اشاره دارد که گره قابل حذف اشاره دارد
بعد هم ptr را حذف می کنیم که در این صورت گره از مدار خارج میشود
(۳۰ اردیبهشت ۱۳۹۱ ۱۱:۱۲ ب.ظ)sajad2020 نوشته شده توسط: به به نظر شما این کد اینطوری نیست؟که میگه تا زمانی که p->nextمخالف nullهست یکی یکی برو جلو بعد وقتی به اخر رسید حذف کن میشه اکولاد نذاشته ؟
خوب یکی یکی جلو بره درست اما بره تا به گره قابل حذف برسه و آخر باید حذف کنه با دستوری که بالا نوشتم ببین می فهمی که این کد عیب داره البته گفتم شاید این در مورد لیست دو پیوندی نوشته که بازم من نگاه کردم اصلا اینجوری نیست
(۳۰ اردیبهشت ۱۳۹۱ ۱۱:۱۶ ب.ظ)sajad2020 نوشته شده توسط: اگه بخواهیم کدش بنویسیم مثل تابعی که من نوشتم چطوری مینویسیم؟
ببین اول باید تعیین کنی کدوم گره رو می خوای حذف کنی یعنی داخل while بنویسی برو تا به مثلا گره با داده معادل ۲۲ رسیدی اونوقت p به اون گره اشاره کنه و یه اشاره گر دیگه بازم باید پیمایش کنه تا به قبل از اون برسه و بعد کد مربوطه و بعد delete
دوست عزیز شکل و با چی میکشی؟من بکشم بعد توضیح بدم شما ببینید درسته؟
بعدش توی تابع گره ای که قرار حذف بشه و گره ماقبلش باید با دستور node*sایجاد کنیم یا new node هم میخواد توی اون کدی که استاد ما نوشته new node نذاشته!
(۳۰ اردیبهشت ۱۳۹۱ ۱۱:۳۰ ب.ظ)sajad2020 نوشته شده توسط: دوست عزیز شکل و با چی میکشی؟من بکشم بعد توضیح بدم شما ببینید درسته؟
بعدش توی تابع گره ای که قرار حذف بشه و گره ماقبلش باید با دستور node*sایجاد کنیم یا new node هم میخواد توی اون کدی که استاد ما نوشته new node نذاشته!
ببین کدش کمی طولانی میشه الانم دیر وقته فردا برات قرار میدم
برای افزودن شکل هم شما باید اول بری قسمت پیش نمایش ارسال بعد قسمت پایین choose محل قرار گرفتن عکس رو انتخاب کنی بعد دکمه افزودن پیوست رو بزن و ارسال کن
موفق باشی
شب بخیر
میخواهیم گره kرو حذف کنیم
باید حتما اطلاعاتinfoرو داشته باشیم تا بتونیم سرچ کنیم یا نه اسم گره کفایت میکنه-شرمنده اگه میشه تابع اینو بنویسید با توضیح ممنون
ایا نیاز نیست اسم همه گره ها رو داشته باشیم من اسم گره دوم ندادم؟
سلام-دوست عزیز یه سوال دارم -صف اولویت دار چیه؟استاد ما سوال داده که صف اولویت دارو با استفاده از لیست یک طرفه طراحی کنیم و تابع حذف و اضافه انرا بنویسیم چطوریه؟متن کامل سوال و بعدا مینویسم !
در مورد صف اولویت باید گفت که اضافه کردن عنصر جدید به هر ترتیبی ممکن است ولی حذف یک عنصر به صورت مرتب می باشد .دو نوع داریم :صعودی و نزولی . در صف اولویت صعودی درج عناصر به هر صورت امکان پذیر است .ولی در موقع حذف کوچکترین عنصر حذف میشود در نزولی درج مثل صعودی است ولی در حذف بزرگترین عنصر حذف میشود .
سوال)صف اولویت صفی است که ایتم ها را به ترتیب اولویت در ان قرار میگیرند ایتم با اولویت بالاتر در سر صف میباشد اگر بخواهیم این صف را با لیست یکطرفه پیاده سازی کنیم هر گره داره سه فیلد میباشد.فیلد اطلاعات و فیلد اولویت و فیلد اشاره گر فیلد اولویت از یک شروع میشود و کمترین عدد بیشترین اولویت را دارد شکل زیر حالتی از این صف است توابع حذف و اضافه ان را بنویسید!