سلام
برای نوشتن الگوریتم صف به وسیله دو پشته چه کار باید انجام بدیم؟
فکر کنم باید از این قاعده استفاده کنیم که پشته دارای top و اخرین ورودی اولین خروجی هست ولی صف دو مقدار front و rear داره و اولین ورودی و اولین خروجی هست ولی نمی دونم چه جوری الگوریتمش رو بنویسم؟؟؟
با دو پشته؟ در صف میشه به انتهایش عضو اضافه کرد و از ابتدایش عضو برداشت اما در پشته به انتهایش عضو
اضافه می کنید و از همان انتهایش هم عضو بر می دارید.
فرق اصلی صف و پشته در اینه که در صف هر دو طرف rear و front (عقب و جلوی) صف قابلیت جابجایی دارند
اما در پشته یک طرف top (بالایش) ثابت است و تغییر نمی کند. به همین جهت اگر بخواهید در پشته عضوی
را بردارید (Pop کنید) از همان سمت دیگر اش که Push کرده بودید اینکار را انجام می دهید و top ثابت می ماند.
فرض کنید که شما یک پشته اصلی دارید که می خواهید رفتار یک صف را با آن پیاده سازی کنید. پشته دوم
را فقط در مواقع لازم بکار خواهید برد.
اضافه کردن عضو به انتهای صف :
اضافه کردن عضو به انتهای صف و Push کردن در پشته فرقی ندارند چون هر دو یک شیوه مشابه دارند.
حذف کردن عضو
اما اگر شما بخواهید در پشته یک عضو از ابتدایش بردارید ساختار پشته چنین اجازه ای را به شما نمی دهد،
مثل این می ماند که بخواهید بین یک سری کاسه که روی هم چیده شده اند، کاسه پایینی را بیرون بکشید.
باید اول همه کاسه های بالاتر را جابجا کنید تا به کاسه زیرین دسترسی داشته باشید.
پس ابتدا باید هر چه که در پشته هست را یکی یکی Pop کرده و در پشته دومی Push کنید تا پشته اصلی خالی شود.
الان کاسه مورد نظر که پایین بود در بالای پشته دوم قرار دارد و می توانید Pop اش کنید. وقتی Pop اش کردید
باید بقیه محتویات پشته دوم به پشته اصلی برگردانده شود. پس همه آنهایی که در پشته دوم هستند را یکی یکی
Pop کرده و در پشته اول Push کنید.