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