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

صف حلقوی - alireza01 - 13 آبان ۱۳۹۵ ۰۶:۲۱ ب.ظ

سلام ، دوستان من یکم تو مفهوم درج و حذف از صف پیوندی حلقوی زمانی که به عنوان مثال ( مکان اول و سوم از یه آرایه ۳ عضوی خالیه الان درج از کجا شروع میشه ؟ ) مشکل دارم این سوالم هست که فک میکنم گزینه ۲ بشه . اگه ممکنه یه مقدار توضیح بدید .



RE: صف حلقوی - delete4all - 13 آبان ۱۳۹۵ ۰۸:۵۸ ب.ظ

(۱۳ آبان ۱۳۹۵ ۰۶:۲۱ ب.ظ)alireza01 نوشته شده توسط:  سلام ، دوستان من یکم تو مفهوم درج و حذف از صف پیوندی حلقوی زمانی که به عنوان مثال ( مکان اول و سوم از یه آرایه ۳ عضوی خالیه الان درج از کجا شروع میشه ؟ ) مشکل دارم این سوالم هست که فک میکنم گزینه ۳ بشه . اگه ممکنه یه مقدار توضیح بدید .


سلام
گزینه صحیح گزینه ۲ میشه و صف ۱ عنصر توش باقی میمونه بعد از اجرای ترتیب داده شده
و زمانی که عنصر اول و سوم خالی هست درج در خانه سوم انجام میشه چون خانه دوم پر هست و برای درج عنصر بعد یه خونه به جلو حرکت میکنه و عنصر رو اضافه میکنه
زیر مفصل توضیح دادم یحتمل متوجه بشی

طبق توضیحات کتاب ها صف حلقوی شرط خالی بودن صف front=rear هست
در ابتدا پس هر دو اشاره گر به خانه ۱ اشاره میکنن (فرض که ۳ خانه داره صف و به ترتیب از ۱ تا ۳ نامگذاری میکنیم )

۱- با اجرای add اول اشاره گر rear توی خانه دوم عنصر رو اضافه میکنه ( توی صف حلقوی برای اینکه بشه تفاوت بین پر و خالی بودن رو تشخیص داد همیشه بین اشاره گر ابتدا و انتها یه خانه از صف رو خالی میگذاره) پس برای همین اشاره گر rear یه خونه به جلو حرکت میکنه و عنصر رو توی خانه ۲ میگذاره
۲- دستور add دوم عنصر بعدی رو توی خانه سوم میزاره ( حالا دیگه صف پره و اگه یه عنصر دیگه میخواست اضافه بشه امکان پذیر نبود و میگفت صف پره)
۳- دستور delete از ابتدای صف یه عنصر رو خارج میکنه که عنصر ابتدای صف الان تو خانه ۲ هست پس اشاره گر front که به خانه اول داره اشاره میکنه یکی به جلو حرکت میکنه و عنصر خانه دوم رو خارج میکنه ( نکته: اشاره گر front همیشه به خانه خالی قبل از عنصر اول اشاره میکنه و اشاره گر rear همیشه به عنصر آخر صف اشاره میکنه )
۴- دستور add یک عنصر رو به خانه شماره ۱ اضافه میکنه
۵- دستور add بعد اجرا نمیشه چون صف پر هست طبق این فرمول front = (rear +1) mode n و ازین دستور میگذره بدون اجرا شدن
۶- delete باعث خارج شدن عنصر از خانه ۳ میشه
۷ - delete باعث خارج شدن عنصر از خانه ۱ میشه
۸- add باعث اضافه شدن عنصر به خانه ۲ میشه
۹- add باعث اضافه شدن عنصر به خانه ۳ میشه
۱۰- delete باعث خارج شدن عنصر از خانه ۲ میشه
و انتها که فقط یک عنصر در صف هست و اونم توی خانه ۳ هست

RE: صف حلقوی - alireza01 - 13 آبان ۱۳۹۵ ۱۱:۴۸ ب.ظ

(۱۳ آبان ۱۳۹۵ ۰۸:۵۸ ب.ظ)delete4all نوشته شده توسط:  طبق توضیحات کتاب ها صف حلقوی شرط خالی بودن صف front=rear هست
در ابتدا پس هر دو اشاره گر به خانه ۱ اشاره میکنن (فرض که ۳ خانه داره صف و به ترتیب از ۱ تا ۳ نامگذاری میکنیم )

۱- با اجرای add اول اشاره گر rear توی خانه دوم عنصر رو اضافه میکنه ( توی صف حلقوی برای اینکه بشه تفاوت بین پر و خالی بودن رو تشخیص داد همیشه بین اشاره گر ابتدا و انتها یه خانه از صف رو خالی میگذاره) پس برای همین اشاره گر rear یه خونه به جلو حرکت میکنه و عنصر رو توی خانه ۲ میگذاره
۲- دستور add دوم عنصر بعدی رو توی خانه سوم میزاره ( حالا دیگه صف پره و اگه یه عنصر دیگه میخواست اضافه بشه امکان پذیر نبود و میگفت صف پره)
۳- دستور delete از ابتدای صف یه عنصر رو خارج میکنه که عنصر ابتدای صف الان تو خانه ۲ هست پس اشاره گر front که به خانه اول داره اشاره میکنه یکی به جلو حرکت میکنه و عنصر خانه دوم رو خارج میکنه ( نکته: اشاره گر front همیشه به خانه خالی قبل از عنصر اول اشاره میکنه و اشاره گر rear همیشه به عنصر آخر صف اشاره میکنه )
۴- دستور add یک عنصر رو به خانه شماره ۱ اضافه میکنه
۵- دستور add بعد اجرا نمیشه چون صف پر هست طبق این فرمول front = (rear +1) mode n و ازین دستور میگذره بدون اجرا شدن
۶- delete باعث خارج شدن عنصر از خانه ۳ میشه
۷ - delete باعث خارج شدن عنصر از خانه ۱ میشه
۸- add باعث اضافه شدن عنصر به خانه ۲ میشه
۹- add باعث اضافه شدن عنصر به خانه ۳ میشه
۱۰- delete باعث خارج شدن عنصر از خانه ۲ میشه
و انتها که فقط یک عنصر در صف هست و اونم توی خانه ۳ هست

ممنون از پاسخ خوبتون ، اما با توجه به توضیحات شما در نهایت توی آرایه عدد ۲ نمیمونه ؟

RE: صف حلقوی - delete4all - 14 آبان ۱۳۹۵ ۱۲:۲۵ ق.ظ

نقل قول: ممنون از پاسخ خوبتون ، اما با توجه به توضیحات شما در نهایت توی آرایه عدد ۲ نمیمونه ؟

بله اگه عدد رو بخوای عدد ۲ میمونه و توی خانه شماره ۳ هست
ااا چه جالب الان دقت کردم سوال تست رو باز نگاه کردم و متوجه شدم که مجموع اعداد باقی مونده توی آرایه رو خواسته که میشه ۲ و گزینه ۲ میشه
جواب بالا رو هم اصلاح کردمBig Grin
من فکر کردم که تعداد باقی مونده عناصر در آرایه رو خواسته
ببخشید.Blush

RE: صف حلقوی - alireza01 - 14 آبان ۱۳۹۵ ۱۲:۳۶ ق.ظ

(۱۴ آبان ۱۳۹۵ ۱۲:۲۵ ق.ظ)delete4all نوشته شده توسط:  
نقل قول: ممنون از پاسخ خوبتون ، اما با توجه به توضیحات شما در نهایت توی آرایه عدد ۲ نمیمونه ؟

بله اگه عدد رو بخوای عدد ۲ میمونه و توی خانه شماره ۳ هست
ااا چه جالب الان دقت کردم سوال تست رو باز نگاه کردم و متوجه شدم که مجموع اعداد باقی مونده توی آرایه رو خواسته که میشه ۲ و گزینه ۲ میشه
جواب بالا رو هم اصلاح کردمBig Grin
من فکر کردم که تعداد باقی مونده عناصر در آرایه رو خواسته
ببخشید.Blush
به این ریزه کاری ها دقت کن ، ممکنه نتیجه زحمتت رو به باد بده Undecided

تشکر Heart

RE: صف حلقوی - majidvatanparast - 14 آبان ۱۳۹۵ ۰۳:۲۷ ب.ظ

سلام
اگر x را به صورت x[0..2] تعریف کنیم ، مقدار دهی اولیه به صورت F=R=0 خواهد بود .
اگر ۲ عنصر اولی را اضافه کنیم F=0 و R=2 خواهد شد ، و اگر یکی حذف کنیم ( طبق ترتیب حذف و اضافه سوال ) ، F=1 و R=2 خواهد شد .
و اگر یه عنصر هم اضافه کنیم F=1 و R=0 خواهد شد و حالا اگر عنصر بعدی رو اضافه کنیم با پیغام صف پر است مواجه خواهیم شد طبق فرمول F=(R+1) % N که در این لحظه دو عنصر با مقادیر ۲ ، ۲ در خانه های با اندیس ۰ و ۲ است که مجموع اینها میشه ۴ و گزینه ۴ میشه .

که دوستمون delete4all بعد از این که صف پر میشه یکی از عناصر و حذف میکنه و کار و ادامه میده اگه اینطوری باشه در آخر ، عنصر با مقدار ۲ میمونه که جواب ۲ میشه !

یعنی من غلط حل کردم و شما درست حل کردید ! ، اگه به ترتیب درج و حذف سوال باشه که نباید موقعی که صف پر شد دیگه ادامه داد و مجموع عناصر میشه ۴ و گزینه ۴ درسته اگه غیر اینه خوشحال میشم راهنمایی کنید Heart .

RE: صف حلقوی - delete4all - 15 آبان ۱۳۹۵ ۱۲:۰۰ ق.ظ

(۱۴ آبان ۱۳۹۵ ۰۳:۲۷ ب.ظ)majidvatanparast نوشته شده توسط:  سلام
اگر x را به صورت x[0..2] تعریف کنیم ، مقدار دهی اولیه به صورت F=R=0 خواهد بود .
اگر ۲ عنصر اولی را اضافه کنیم F=0 و R=2 خواهد شد ، و اگر یکی حذف کنیم ( طبق ترتیب حذف و اضافه سوال ) ، F=1 و R=2 خواهد شد .
و اگر یه عنصر هم اضافه کنیم F=1 و R=0 خواهد شد و حالا اگر عنصر بعدی رو اضافه کنیم با پیغام صف پر است مواجه خواهیم شد طبق فرمول F=(R+1) % N که در این لحظه دو عنصر با مقادیر ۲ ، ۲ در خانه های با اندیس ۰ و ۲ است که مجموع اینها میشه ۴ و گزینه ۴ میشه .

که دوستمون delete4all بعد از این که صف پر میشه یکی از عناصر و حذف میکنه و کار و ادامه میده اگه اینطوری باشه در آخر ، عنصر با مقدار ۲ میمونه که جواب ۲ میشه !

یعنی من غلط حل کردم و شما درست حل کردید ! ، اگه به ترتیب درج و حذف سوال باشه که نباید موقعی که صف پر شد دیگه ادامه داد و مجموع عناصر میشه ۴ و گزینه ۴ درسته اگه غیر اینه خوشحال میشم راهنمایی کنید Heart .

سلام
قاعدتا درج و حذف به ترتیب گفته شده هست اما یه نکته اینه که چرا شما وقتی الگوریتم به پر شدن صف رسید برنامه رو خاتمه میدید!؟
بعد از اینکه به درج عنصر بعد رسید، صف ابتدا چک میکنه که آیا جا داره یا نه و میبینه صف پره و جا نداره پس از درج عنصر جدید صرف نظر میکنه و به مرحله بعدی میره که حذف عنصر هست و ادامه

RE: صف حلقوی - majidvatanparast - 16 آبان ۱۳۹۵ ۰۸:۴۲ ب.ظ

(۱۵ آبان ۱۳۹۵ ۱۲:۰۰ ق.ظ)delete4all نوشته شده توسط:  
(14 آبان ۱۳۹۵ ۰۳:۲۷ ب.ظ)majidvatanparast نوشته شده توسط:  سلام
اگر x را به صورت x[0..2] تعریف کنیم ، مقدار دهی اولیه به صورت F=R=0 خواهد بود .
اگر ۲ عنصر اولی را اضافه کنیم F=0 و R=2 خواهد شد ، و اگر یکی حذف کنیم ( طبق ترتیب حذف و اضافه سوال ) ، F=1 و R=2 خواهد شد .
و اگر یه عنصر هم اضافه کنیم F=1 و R=0 خواهد شد و حالا اگر عنصر بعدی رو اضافه کنیم با پیغام صف پر است مواجه خواهیم شد طبق فرمول F=(R+1) % N که در این لحظه دو عنصر با مقادیر ۲ ، ۲ در خانه های با اندیس ۰ و ۲ است که مجموع اینها میشه ۴ و گزینه ۴ میشه .

که دوستمون delete4all بعد از این که صف پر میشه یکی از عناصر و حذف میکنه و کار و ادامه میده اگه اینطوری باشه در آخر ، عنصر با مقدار ۲ میمونه که جواب ۲ میشه !

یعنی من غلط حل کردم و شما درست حل کردید ! ، اگه به ترتیب درج و حذف سوال باشه که نباید موقعی که صف پر شد دیگه ادامه داد و مجموع عناصر میشه ۴ و گزینه ۴ درسته اگه غیر اینه خوشحال میشم راهنمایی کنید Heart .

سلام
قاعدتا درج و حذف به ترتیب گفته شده هست اما یه نکته اینه که چرا شما وقتی الگوریتم به پر شدن صف رسید برنامه رو خاتمه میدید!؟
بعد از اینکه به درج عنصر بعد رسید، صف ابتدا چک میکنه که آیا جا داره یا نه و میبینه صف پره و جا نداره پس از درج عنصر جدید صرف نظر میکنه و به مرحله بعدی میره که حذف عنصر هست و ادامه


من فک میکردم بعد از اینکه صف پر شد و با توجه به ترتیب حذف و اضافه سوال بعد از پرشدن عمل درج صورت میگیرد دیگه نمیشه ادامه داد ! البته هنوز هم مرددم !

RE: صف حلقوی - alireza01 - 18 آبان ۱۳۹۵ ۰۳:۱۹ ب.ظ

(۱۶ آبان ۱۳۹۵ ۰۸:۴۲ ب.ظ)majidvatanparast نوشته شده توسط:  من فک میکردم بعد از اینکه صف پر شد و با توجه به ترتیب حذف و اضافه سوال بعد از پرشدن عمل درج صورت میگیرد دیگه نمیشه ادامه داد ! البته هنوز هم مرددم !

دوست عزیز بعد از اینکه به مرحله ای رسیدیم که صف پره و ما قصد اضافه کردن به اون صف پر رو داریم ، حل سوال متوقف نمیشه بلکه فقط پیامی داریم مبنی بر اینکه صف ما پره و این دستور قابل اجرا نیست ( متوقف نمیشه ) ، و دستورات بعدی رو به ترتیب سوال اجرا میکنیم .