مقدمه ای بر ساختار داده استک (Stack) و صف (Queue)
معرفی و کاربردهای Stack
Stack یکی از ساختارهای داده پرکاربرد در برنامهنویسی است. این ساختار داده به صورت پشته ای (LIFO) عمل میکند، به این معنی که آیتمها به صورت استک درج و حذف میشوند. برخی از کاربردهای معروف Stack عبارتند از:
- برگشت از توابع function call stack) Stack): برای ذخیره ترتیب فراخوانی توابع و بازگشت از آنها استفاده میشود.
- عملیات بازگشت در پردازشگرها: Stack در پیادهسازی عملیات بازگشت و بازیابی مقادیر از آدرسهای بازگشت بهرهبرداری میشود.
- استک تاریخچه history stack) Stack): میتواند برای ذخیره تاریخچه فعالیتها در برنامهها مفید باشد.
معرفی و کاربردهای Queue
Queue نیز یک ساختار داده پرکاربرد است که به صورت صف (FIFO) عمل میکند، به این معنی که آیتمها به صورت صف درج و حذف میشوند. برخی از کاربردهای معروف Queue عبارتند از:
- صف مربوط به رویدادها (event queue): در برنامههای رویدادمحور، Queue میتواند برای مدیریت رویدادها و انتظار برای پردازش آنها استفاده شود.
- صف برای پردازش درخواستها (request queue): Queue معمولاً در برنامههای مبتنی بر شبکه برای مدیریت درخواستهای ورودی و اولویتبندی آنها استفاده میشود.
- صف برای پردازش نوبتدهی (job queue): Queue در برنامههایی که به طور همزمان برای پردازش وظایف نوبتبندی میشوند، استفاده میشود.
تفاوتهای بین Stack و Queue
تفاوت اصلی بین Stack و Queue در ترتیب ورود و خروج آیتمها است. در Stack، آیتمی که اخیراً درج شده است، اولین آیتمی است که حذف میشود، در حالی که در Queue، آیتمی که اولین درج شده است، اولین آیتمی است که حذف میشود. به عبارت دیگر، Stack به صورت LIFO عمل میکند و Queue به صورت FIFO عمل میکند.
پیادهسازی و استفاده از Stack در سی شارپ
در زبان برنامهنویسی سی شارپ، میتوان از ساختار داده Stack با استفاده از کلاس System.Collections.Generic.Stack استفاده کرد. در زیر یک نمونه از پیادهسازی و استفاده از Stack در C# را مشاهده میکنید:
Stack stack = new Stack(); // اضافه کردن آیتمها به Stack
stack.Push(10);
stack.Push(20);
stack.Push(30);
// حذف آیتم از Stack
int removedItem = stack.Pop();
// دسترسی به آیتم بالای Stack بدون حذف آن
int topItem = stack.Peek();
// تعداد آیتمهای موجود در Stack
int count = stack.Count;
// خالی بودن Stack
bool isEmpty = stack.Count == 0;
پیادهسازی و استفاده از Queue در C#
در C# نیز، میتوان از ساختار داده Queue با استفاده از کلاس System.Collections.Generic.Queue استفاده کرد. در زیر یک نمونه از پیادهسازی و استفاده از Queue در C# را مشاهده میکنید:
Queue queue = new Queue(); // اضافه کردن آیتمها به Queue
queue.Enqueue("مورچه");
queue.Enqueue("پلنگ");
queue.Enqueue("شیر");
// حذف آیتم از Queue
string removedItem = queue.Dequeue();
// دسترسی به آیتم اول Queue بدون حذف آن
string firstItem = queue.Peek();
// تعداد آیتمهای موجود در Queue
int count = queue.Count;
// خالی بودن Queue
bool isEmpty = queue.Count == 0;
در این مثالها، ابتدا یک Stack و یک Queue ایجاد شده و سپس آیتمها به آنها اضافه و حذف میشوند. همچنین از متدها و ویژگیهای مربوطه برای دسترسی به آیتمها، بررسی تعداد آیتمها و بررسی خالی بودن Stack و Queue استفاده شده است. با استفاده از این دو ساختار داده، میتوانید در برنامههای خود از تواناییهایی مانند برگشت از توابع، مدیریت رویدادها، مدیریت درخواستها و سایر کاربردهای مربوطه بهرهبرداری کنید. در پایان توصیه می کنیم برای یادگیری هر چه بهتر این مطالب از پکیج کامل آموزش الگوریتم ها و ساختمان داده ها در سی شارپ استفاده کنید.