Queue در سی شارپ
در فرهنگ لغت، صف به معنای “خط انتظار” است، مانند صفی که مردم برای گرفتن نان در گرفتن نان در جلوی نانوایی تشکیل میدهند. و در ساختمان داده، صف مجموعه ای از عناصر است که عناصر از یک طرف به نام آخر صف به آن اضافه و از طرف جلوی صف از آن حذف میشوند. بر خلاف پشته، صف از هر دو سمت باز است. از یک سمت همواره برای درج داده ها و از سمت دیگر برای حذف داده ها استفاده می شود. در این ساختار هر داده ای که اول در صف ذخیره شود، هنگام خروج نیز قبل از همه خارج می شود.
Queue یا صف نوع خاصی از مجموعه است که عناصر را به سبک FIFO یا First In First Out (خروج به ترتیب ورود)، دقیقاً برعکس مجموعه Stack ذخیره می کند. صف شامل عناصر به همان ترتیبی است که اضافه شده اند. سی شارپ شامل مجموعه های صف عمومی و صف غیر عمومی است. توصیه می شود از مجموعه <Queue<T عمومی استفاده کنید.
خصوصیات و ویژگی های Queue
1- <Queue<T مجموعه FIFO (First In First Out) است.
2- در فضای نام System.Collection.Generic قرار می گیرد.
3- <Queue<T می تواند حاوی عناصری از نوع مشخص شده باشد. چک کردن نوع زمان کامپایل را فراهم می کند و boxing-unboxing را انجام نمی دهد زیرا عمومی است.
4- در <Queue<T عناصر را می توان با استفاده از متد ()Enqueue اضافه کرد. نمی توان از سینتکس collection-initializer استفاده کرد.
5-عناصر را می توان با استفاده از متدهای ()Dequeue و ()Peek بازیابی کرد. <Queue<T در واقع indexer را پشتیبانی نمی کند.
شکل زیر مجموعه Queue را نشان می دهد:
ایجاد Queue
شما می توانید با تعیین یک نوع پارامتر برای نوع عناصری که می تواند ذخیره کند، یک شی از <Queue<T ایجاد کنید. مثال زیر با استفاده از متد ()Enqueue عناصر را در <Queue<T ایجاد و اضافه می کند. در مجموعه صف می توانید مقادیر تهی (برای انواع مرجع) و تکراری را ذخیره کنید.
خروجی قطعه کد بالا به صورت زیر می باشد.
ویژگی های Queue
1- Count
تعداد کل عناصر موجود در صف را برمی گرداند.
متد های Queue
1- Enqueue(T)
یک آیتم را به صف اضافه می کند.
2- Dequeue
یک آیتم را از ابتدای صف برمی گرداند و آن را از صف حذف می کند.
3- ()Peek
اولین آیتم را بدون حذف آن از صف برمی گرداند.
4- Contains(T)
بررسی می کند که آیا یک آیتم در صف وجود دارد یا خیر. از این متد برای جست وجوی عنصری در صف استفاده میکنیم که در جلوی صف نیست.
5- ()Clear
این متد، کلیه عناصر صف را حذف می کند و خاصیت Count را برابر صفر قرار می دهد. یک کاربرد خوب این متد وقتی است که خطایی در پردازش صف وجود داشته باشد و بخواهیم تمام عناصر آنرا حذف کنیم.
بازیابی عناصر از Queue
متدهای ()Dequeue و ()Peek برای بازیابی اولین عنصر در یک مجموعه صف استفاده می شود. ()Dequeue اولین عنصر را از یک صف حذف و برمی گرداند زیرا صف عناصر را به ترتیب FIFO ذخیره می کند. فراخوانی متد Dequeue() در یک صف خالی، استثناء InvalidOperation را ایجاد می کند. بنابراین، همیشه قبل از فراخوانی، بررسی کنید که تعداد کل عناصر یک صف بزرگتر از صفر باشد.
خروجی قطعه کد بالا به صورت زیر می باشد.
متد ()Peek همیشه اولین آیتم را از یک مجموعه صف بدون حذف آن برمی گرداند. فراخوانی متد ()Peek در یک صف خالی، یک استثنا در زمان اجرا InvalidOperationException ایجاد می کند.
خروجی قطعه کد بالا به صورت زیر می باشد.
()Contains
متد ()Contains بررسی می کند که آیا یک آیتم در یک صف وجود دارد یا خیر. اگر آیتم مشخص شده وجود داشته باشد true را برمی گرداند، در غیر این صورت false را برمی گرداند.
امضای ()Contains عبارت است از: bool Contains(object obj)
خروجی قطعه کد بالا به صورت زیر می باشد.