Stack(Yığın), öğeleri LIFO tarzında (Son Giren İlk Çıkar) depolayan özel bir koleksiyon türüdür. C#, generic Stack ve non-generic Stack koleksiyonu sınıflarını içerir. Generic Stack koleksiyonunun kullanılması önerilir.
Stack , geçici verileri LIFO tarzında depolamak için kullanışlıdır ve bir öğeyi değerini aldıktan sonra silmek isteyebilirsiniz.
Stack Özellikleri
- Stack Son Giren İlk Çıkar koleksiyonudur.
- System.Collection.Generic ad alanı altında gelir.
- Stack, belirtilen türde öğeler içerebilir. Derleme zamanı tür denetimi sağlar ve genel olduğu için boxing ve unboxing gerçekleştirmez.
- Öğeler, Push () yöntemi kullanılarak eklenebilir. Koleksiyon başlatıcı sözdizimi kullanılamaz.
- Öğeler, Pop() ve Peek() yöntemleri kullanılarak alınabilir. Bir indeksleyiciyi desteklemez.
Stack Oluşturma
Depolayabileceği öğelerin türü için bir tür parametresi belirterek Stack nesnesini oluşturabilirsiniz. Aşağıdaki örnek, Push() yöntemini kullanarak Stack içinde öğeler oluşturur ve ekler. Stack, boş (referans türleri için) ve yinelenen değerlere izin verir.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | class Program { static void Main(string[] args) { Stack<int> stack1 = new Stack<int>(); stack1.Push(1); stack1.Push(2); stack1.Push(3); stack1.Push(4); foreach (var item in stack1) Console.Write(item + ","); // 4,3,2,1, Console.ReadKey(); } } |
Aşağıda gösterildiği gibi bir diziden de bir Stack oluşturabilirsiniz.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | class Program { static void Main(string[] args) { int[] arr = new int[] { 1, 2, 3, 4 }; Stack<int> stack1 = new Stack<int>(arr); foreach (var item in stack1) Console.Write(item + ","); // 4,3,2,1, Console.ReadKey(); } } |
Stack Özellikleri ve Metodları:
Özellik | Tanımı |
---|---|
Count | Stack içindeki toplam element sayısını döndürür. |
Metod | Tanımı |
---|---|
Push(T) | Yığının başına öğe ekler. |
Peek() | Yığının başındaki öğeyi getir. |
Pop() | Yığının başındaki öğeyi alıp çıkarır. |
Contains(T) | Öğenin yığın içinde olup olmadığını kontrol eder. |
Clear() | Yığındaki tüm öğeleri siler. |
Pop() Kullanımı
Pop() metodu, son öğeyi döndürür ve onu bir yığından kaldırır. Bir yığın boşsa, InvalidOperationException’ı atar. Bu nedenle, Pop() yöntemini çağırmadan önce her zaman bir yığındaki öğelerin sayısını kontrol edin.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | class Program { static void Main(string[] args) { Stack<int> stack1 = new Stack<int>(); stack1.Push(1); stack1.Push(2); stack1.Push(3); stack1.Push(4); Console.Write("Stack içindeki eleman sayısı: {0}", stack1.Count); while (stack1.Count > 0) Console.Write(stack1.Pop() + ","); Console.Write("\nStack içindeki eleman sayısı: {0}", stack1.Count); Console.ReadKey(); } } |
Çıktı:
1 2 3 4 | Stack içindeki eleman sayısı: 44,3,2,1, Stack içindeki eleman sayısı: 0 |
Peek() Kullanımı
Peek() metodu, yığından son eklenen değeri döndürür, ancak kaldırmaz. Boş bir yığında Peek() yöntemini çağırmak InvalidOperationException’ı oluşturur. Bu nedenle, Peek() yöntemini kullanarak öğeleri almadan önce her zaman yığındaki öğeleri kontrol edin.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | class Program { static void Main(string[] args) { Stack<int> stack1 = new Stack<int>(); stack1.Push(10); stack1.Push(20); stack1.Push(30); stack1.Push(40); Console.WriteLine("Stack içindeki eleman sayısı: {0}", stack1.Count); //4 if (stack1.Count > 0) { Console.WriteLine(stack1.Peek()); // 40 Console.WriteLine(stack1.Peek()); // 40 } Console.WriteLine("Stack içindeki eleman sayısı: {0}", stack1.Count); //4 Console.ReadKey(); } } |
Contains() Kullanımı
Contains() yöntemi, belirtilen öğenin bir Stack koleksiyonunda olup olmadığını kontrol eder. Varsa true, değilse false döndürür.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | class Program { static void Main(string[] args) { Stack<int> stack1 = new Stack<int>(); stack1.Push(10); stack1.Push(20); stack1.Push(30); stack1.Push(40); bool b1 = stack1.Contains(20); bool b2 = stack1.Contains(100); Console.WriteLine(b1);// true Console.WriteLine(b2);// false Console.ReadKey(); } } |